Miro Kepinski

Miro Kepinski Film Composer /
Award-winning
producer / Performer

Temat: problem z operatorami SQL

Witam,

Mam taki problem z SQL. Moje zapytanie do bazy:

 $query .= " AND ( meta".$licznik.".meta_key='".$klucz."' AND (meta".$licznik.".meta_value >= '".$wartosc."')) "; 


Wyrzuca mi 'bliżej nieokreśloną' listę wyników. Np. jeżeli chcę wyświetlić wszystkie wyniki większe od 60, pokazuje mi te większe i te mniejsze ;/

Jeżeli zapytanie zamiast >= zawiera LIKE (jak poniżej) działa prawidłowo.


$query .= " AND ( meta".$licznik.".meta_key='".$klucz."' AND (meta".$licznik.".meta_value LIKE '%".$wartosc."%')) ";


Całość skryptu działa poprawnie. Proszę o pomoc z tym pierwszym zapytaniem SQL.

Dzięki.

konto usunięte

Temat: problem z operatorami SQL

Sugestia. Przed wykonaniem zapytania jak już wsadzisz wartości wyrzuć sobie na ekran to zapytanie i tutaj zapodaj.
Ciężko zawyrokować kiedy nie wiemy jak będzie wyglądać właściwe zapytanie z podstawionymi wartościami.
Tylko realne wartości jeśli można tzn te które powodują błąd.

konto usunięte

Temat: problem z operatorami SQL

Spróbuj

$query .= " AND ( meta".$licznik.".meta_key='".$klucz."' AND (meta".$licznik.".meta_value >= ".$wartosc.")) ";
Andrzej Łakomski edytował(a) ten post dnia 15.06.12 o godzinie 15:34
Miro Kepinski

Miro Kepinski Film Composer /
Award-winning
producer / Performer

Temat: problem z operatorami SQL

Andrzej -> dobre ;)

Dzięki

konto usunięte

Temat: problem z operatorami SQL

Po prostu przyrównywałeś do stringa ;)

Polecam się na przyszłość ;P

@Dariusz - nie potrzebujesz całego zapytania, żeby zdebugować taki błąd ;)Andrzej Łakomski edytował(a) ten post dnia 15.06.12 o godzinie 16:30
Miro Kepinski

Miro Kepinski Film Composer /
Award-winning
producer / Performer

Temat: problem z operatorami SQL

Dzięki ;)

A jak mam dwa takie zapytania ( oczywiście meta_key sa różne )?

 $query .= " AND ( meta".$licznik.".meta_key='".$klucz."' AND (meta".$licznik.".meta_value >= ".$wartosc.")) ";
$query .= " AND ( meta".$licznik.".meta_key='".$klucz."' AND (meta".$licznik.".meta_value <= ".$wartosc.")) ";


Czyli, że mniejsze równe od i dalej mniejsze lub równe do ?

Ten drugi przypadek mi też wariuje.

konto usunięte

Temat: problem z operatorami SQL

Każde z osobna działa dobrze?

Bo błędów syntaktycznych tutaj nie widzę, prawdopodobnie zwraca Ci cały zakres, bo 'meta_key' wcale nie są różne ;)
Miro Kepinski

Miro Kepinski Film Composer /
Award-winning
producer / Performer

Temat: problem z operatorami SQL

Ten drugi przypadek

 $query .= " AND ( meta".$licznik.".meta_key='".$klucz."' AND (meta".$licznik.".meta_value <= ".$wartosc.")) "; 


nie działa poprawnie, tzn. wyrzuca wyniki z bazy <= $wartosc ale tez wyrzuca wyniki, które wogóle nie mają wartości $klucz :/

W drugą stronę, czyli

 $query .= " AND ( meta".$licznik.".meta_key='".$klucz."' AND (meta".$licznik.".meta_value >= ".$wartosc.")) "; 


wszystko działa OK. Wyrzuca dane tylko kiedy zawierają $klucz i <= $wartosc

PS. klucze są różne. skrypt działa w pętli dlatego ma takie same nazwy zmiennych $klucz. W rzeczywistości sa to: size i size_min
Miro Kepinski

Miro Kepinski Film Composer /
Award-winning
producer / Performer

Temat: problem z operatorami SQL

zapytanie SQL z tymi dwiema wartościami wygląda tak:

SELECT SQL_CALC_FOUND_ROWS wp_posts.* FROM wp_posts JOIN wp_postmeta meta0 ON meta0.post_id=wp_posts.id JOIN wp_postmeta meta1 ON meta1.post_id=wp_posts.id WHERE (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'private') AND (wp_posts.post_type='ad') AND ( meta0.meta_key='s2' AND (meta0.meta_value>=30)) AND ( meta1.meta_key='s' AND (meta1.meta_value<=2000))

ps. nie napisałem tego skryptu ale muszę go poprawić :/Miro Kepinski edytował(a) ten post dnia 15.08.12 o godzinie 02:37

konto usunięte

Temat: problem z operatorami SQL

Andrzej Łakomski:
Po prostu przyrównywałeś do stringa ;)

Polecam się na przyszłość ;P

@Dariusz - nie potrzebujesz całego zapytania, żeby zdebugować taki błąd ;)

Racja, po prostu nie zwróciłem uwagi więc założyłem że coś z wartościami jest nie tak. Poza tym jak by @Miro wyświetlił sobie pełne zapytanie z podstawionymi wartościami to by załapał raczej co jest nie tak.

A nie zwróciłem uwagi bo dawno nie widziałem tak zrobionego zapytania (ze zmiennymi w środku) :P Myślałem że dzisiaj już każdy raczej dla świętego spokoju przepuszcza całość przez "prepared statments" który załatwia za nas takie drobiazgi.

@Miro, weź mi proszę powiedz że te klucze i wartości gdzieś wcześniej filtrujesz :P

konto usunięte

Temat: problem z operatorami SQL

Jeśli mówimy o optymalizacji to proponowałbym na wszelki wypadek przetestować jeszcze osobne zapytanie oparte o COUNT(*) zamiast użycia SQL_CALC_FOUND_ROWS. Ta ostatnia metoda nie zawsze jest szczęśliwym rozwiązaniem jak opisano tu.

Następna dyskusja:

problem z zapytaniem SQL




Wyślij zaproszenie do