01. april 2011 - 19:25Der er
18 kommentarer og 1 løsning
returner rows selvom den ikke burde
Hejsa. Kode neden under er et php script som bliver kaldt via et ajax script. Det den skal (og gør) er at returnere nogle rows via et json objekt. Den tjekke om der blevet givet et søge kritere, hvis der er blive dette tilføjet til mssql stringen.
Derudover sender den kun 100 af gangen. det er fordi der er en knap på hjemmesiden der hedder "hent de 100 næste". Dette virker også fint nok. men hvis man søger og den sender fx. 13 rows tilabge der opfylder søge kriterene og man så trykker på hent 100 næste, så henter de samme rows igen (dette burde den ikke gøre), den burde bare sende et tomt json objekt tilbage.
Dog hvis man ikke søger og man trykker på "hent 100 næste" nok gange således man når til enden af tabellen, så sender den et tomt json objekt tilbage (som den burde). Det er bare for at understrege at problemet er der kun når man søger.
switch($_POST["data"]) { case "customer": if(!empty($search)) { $sqlSearch = " id LIKE '$search%' OR customer_name LIKE '$search%' OR customer_roadname LIKE '%$search%' OR customer_city LIKE '$search%' AND"; $sqlSearchNext = " WHERE id LIKE '$search%' OR customer_name LIKE '$search%' OR customer_roadname LIKE '%$search%' OR customer_city LIKE '$search%'"; } $sqlString .= "cust_customer WHERE$sqlSearch id NOT IN(SELECT TOP $page id FROM cust_customer$sqlSearchNext ORDER BY id) ORDER BY id";
For det første mangler du vist nogle mellemrum i denne streng:
$sqlString .= "cust_customer WHERE$sqlSearch id NOT IN(SELECT TOP $page id FROM cust_customer$sqlSearchNext ORDER BY id) ORDER BY id";
Dernæst bør du nok prøve at udskrive $page, $search og $_POST["data"] til en logfil på serveren, så du kan se, hvad de indeholder i forskellige situationer
nej mangler ikke mellemrum. De er i sql string som evt. bliver tilføjet.
$_POST["data"] indholer "customer" ellers vil funktionen slet ikke blive kørt, og det gør den ;) .
$page bliver også har også den rigtige værdi, den bliver plusset med en for hver gang der trykkes på "hent 100 næste". $search inderholder søgeordet.
Jeg har prøvet at skrive sql stringen ud som blive eksikveret. Den ser ud som den er tiltænkt i de forskellige situtationer. Den er gør bare ikke som tiltænkt.
de her returnere alle det samme. Selvom de to sidste ikke burde returnere noget:
SELECT TOP 100 * FROM cust_customer WHERE id LIKE 'brian%' OR customer_name LIKE 'brian%' OR customer_roadname LIKE '%brian%' OR customer_city LIKE 'brian%' AND id NOT IN(SELECT TOP 0 id FROM cust_customer WHERE id LIKE 'brian%' OR customer_name LIKE 'brian%' OR customer_roadname LIKE '%brian%' OR customer_city LIKE 'brian%' ORDER BY id) ORDER BY id
SELECT TOP 100 * FROM cust_customer WHERE id LIKE 'brian%' OR customer_name LIKE 'brian%' OR customer_roadname LIKE '%brian%' OR customer_city LIKE 'brian%' AND id NOT IN(SELECT TOP 100 id FROM cust_customer WHERE id LIKE 'brian%' OR customer_name LIKE 'brian%' OR customer_roadname LIKE '%brian%' OR customer_city LIKE 'brian%' ORDER BY id) ORDER BY id
SELECT TOP 100 * FROM cust_customer WHERE id LIKE 'brian%' OR customer_name LIKE 'brian%' OR customer_roadname LIKE '%brian%' OR customer_city LIKE 'brian%' AND id NOT IN(SELECT TOP 200 id FROM cust_customer WHERE id LIKE 'brian%' OR customer_name LIKE 'brian%' OR customer_roadname LIKE '%brian%' OR customer_city LIKE 'brian%' ORDER BY id) ORDER BY id
Hvis $sqlString ser ud, som du forventer, må du forklare, hvad det er, du forventer - for så har jeg vist ikke fantasi til at foretsille mig dine forventninger
De ser ud som jeg har postet der (der er 3 stk.). De to sidste burde ikke returnere nogle rows fordi der er kun omkring 20 rows der opfylder LIKE kriterene (i dette tilfælde brian).
Dog retunere de alle samme de 20 rows som der er.
forstår du? ellers skal jeg nok prøve at forklare det bedre
#7 >> Prøv nu lige engang at kikke på den streng, jeg har kopieret efter din i spørgsmålet. Der mangler mellemrum - og det gør der ikke i de tre strenge, du lige har pasted ind. Der er noget, der ikke stemmer
Vrøvl, det er mig, der overså det indledende mellemrum i de to først strenge :D
Synes godt om
Slettet bruger
02. april 2011 - 02:06#12
Ja, dér er MySQL's LIMIT sgu noget enklere : )
Men bør det ikke være i denne retning (lettere forkortet udvælgelse)
Side 1: SELECT TOP 100 * FROM cust_customer WHERE id='brian' ORDER BY id
Side 2: SELECT TOP 200 * FROM cust_customer WHERE id='brian' AND id NOT IN(SELECT TOP 100 id FROM cust_customer WHERE id='brian' ORDER BY id) ORDER BY id
Side3: SELECT TOP 300 * FROM cust_customer WHERE id='brian' AND id NOT IN(SELECT TOP 200 id FROM cust_customer WHERE id='brian' ORDER BY id) ORDER BY id
Da jeg ikke har fået løst mit problem vil jeg lukke spørgsmålet... Men jeg vil gerne give point til dem der har brugt tid på at hjælpe... Jeg venter 2 dage...
Synes godt om
Slettet bruger
01. maj 2011 - 10:56#18
No cure, no pay!
Kan du ikke forsimple udtrykket (til ren bladring), og få dét til at virke - og derefter begynde at fylde "komplikationer" på...
Da det blev løst med et meget custom wien around, vil jeg bare lukke spørgsmålet
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.