sql >> Databáze >  >> RDS >> Mysql

Pokud zadáte pouze jedno písmeno, výsledek vyhledávání PHP vygeneruje jiný výsledek

Váš dotaz SQL musí správně seskupit vaše podmínky

$query=mysql_query("select * from persons where status like 'found' and (firstname like '%$searchtext%' or lastname like '%$searchtext%') order by date desc LIMIT $start,$per_page ");

To, co jste dělali, je ekvivalentní něčemu takovému v kódu:

if (status == 'found' && firstname like 'a')
{
    return row;
}
else if (lastname like 'a')
{
    return row;
}

Pokud toto vidíte, může to být o něco jasnější, pokud selže první podmínka (jediná kontroluje, zda status == 'found' poté přeskočí na další podmínku (za příkazem OR) a pouze zkontroluje, zda lastname odpovídá.

Budete muset seskupit podmínku příkazu select, aby ji správně zkontroloval:

...where status like 'found' and (firstname like '%$searchtext%' or lastname like '%$searchtext%') order by...

V tomto případě seskupujeme obě firstname a lastname podmínky dohromady (v závorkách), takže celá podmínka OR vede k jediné odpovědi typu pravda/nepravda, tato odpověď se pak použije na status zkontrolovat po.




  1. Top 30 nejužitečnějších souběžných manažerských dotazů

  2. Zobrazuje se chyba Chyba při převodu datového typu nvarchar na skutečný.

  3. Efektivní zpracování hodnot NULL pomocí funkce SQL COALESCE pro začátečníky

  4. Jak zachovat tělo odpovědi na odpovědích jiných než 200 v Oracle UTL_HTTP?