Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: % w zapytaniu
Forum PHP.pl > Forum > Bazy danych
calebos
Czesc

Mam taki skrypt ktory z kilkunastu wybieralnych list HTML ( ktorych dane brane sa z bazy)
Tworzy takie query

CODE
$query="SELECT * FROM coredump1
WHERE
TYP_ZGLOSZENIA like '$typ' and
podtyp_zgloszenia like '$podtyp' and
data_od like '$time' and
Segment like '$segment' and
Lista2_kierownik like '$kierownik' and
wydzial like '$wydzial' and
dzial like '$dzial' and
sekcja like '$sekcja'";


Ustawiam 'option selected value' na '%' zeby w momencie kiedy nic nie jest wybrane to query dzialalo.
Niektorzy mowia ze to nie jest najlepszy sposob itp znowu inny ze mysql optimizer wychwyca i tak te % przed zapytaniem i ignoruje te 'WHERE'y gdzie wartosc jest ustawiona na %.

Czy to query jest ok ?
tommy4
'%' to specjalny znak w sqlu, tak jak gwiazdka w regexie.

Gdy podmieniasz zmienną tym znakiem zapytanie wygląda dajmy na to tak: SELECT * FROM asdf WHERE costam = '%', co prawdopodobnie wybierze wszystkie dane z bazy.
calebos
Wiem ze tak robi ale czy ma to jakies znaczenie przy wykonywaniu query dla mysql'a ?
Moze inaczej: Czy 'where costam='%' zadziala tak samo jak brak warunku.
Chodzi mi bardziej o strone optymalizacji tego query nizeli sam wynik.
tommy4
Troszkę wolniej na pewno.
batman
Gwoli uściślenia.
Zapytanie:
  1. SELECT * FROM tabela WHERE pole = '%'

zwróci jedynie te wiersze, gdzie wartość kolumny pole wynosi %.

Zapytanie:
  1. SELECT * FROM tabela WHERE pole LIKE '%'

zwróci wszystkie wiersze.

Zapytanie:
  1. SELECT * FROM tabela WHERE pole LIKE '\%'

zadziała tak samo jak pierwsze zapytanie.

A odnośnie wydajności. Jeśli różnica się pojawi, to będzie ona znikoma. Będzie jednak rosła wraz ze wzrostem ilości danych w tabeli. Dlatego też warto usunąć niepotrzebne klauzule where.
calebos
Troche zejdzie to na php ale jak zrobic taka petle zeby tworzyla dynamicznie to query ?
Jest 20 kolumn i dla kazdej chcialbym np zrobic warunek jesli select z html wybrany to dodaj do query "where kolumnax='warunek'".
calebos
Troche duzo tych if'ow wyjdzie.

Wiem ze moglbym sie doczytac jak zrobic to uzywajac tablic ale jakis hint bylby bardzo mile widziany.
MMPrime
Dla 450.000 rekordów nie zauważyłem różnicy w czasie generowania danych, jedynie EXPLAIN informuje że użyto warunku WHERE dla zapytania z LIKE.
nospor
Cytat
ale jakis hint bylby bardzo mile widziany.
No przeciez dostales "hinta". podalem ci temat gdzie to masz na przykladzie zrobione. Czego wiecej chciec?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.