Grzegorz M.

Grzegorz M. www.avatec.pl

Temat: Multiple query - wiele wartości dla jednego pola

Witajcie,

Problem zapewne banalny, ale troche się przy nim zatrzymałem:

mam sobie tabele np:

| id | city | district | enabled

mam też sobie multiply select, gdzie zaznaczam kilka miejscowości np.:

| 1 | Warszawa | Praga | true
| 2 | Warszawa | Włochy | true
| 3 | Kraków | Nowa huta | false
| 4 | Kielce | Ślichowice | true

i teraz chcę pobrać wartości, ze wszystkimi 3 wartościami district:

SELECT * FROM tabela WHERE
district = 'Praga' OR district = 'Włochy' OR district = 'Nowa huta'

i tak ślicznie działa, ale... gdy np. zaznaczam sobie:
warszawa, kielce i do query dochodzi wymuszenie status=true

SELECT * FROM tabela WHERE
city='Warszawa' AND status='true' OR city='Kielce' AND status='true'

to jak widać muszę za każdym razem dublować zapytanie miasto i status lub miasto i status - jest jakaś możliwość by to prościej pobrać bez takiego dublowania ? samo miasto lub miasto lub miasto i status wyswietla mi cala zawartosc tabeli, nie tylko miasta ktore podalem w query.

Z góry dziękuję za poświęcony czas i ewentualną pomoc.

konto usunięte

Temat: Multiple query - wiele wartości dla jednego pola

Grzegorz M.:
Witajcie,

Problem zapewne banalny, ale troche się przy nim zatrzymałem:
...ciach
i tak ślicznie działa, ale... gdy np. zaznaczam sobie:
warszawa, kielce i do query dochodzi wymuszenie status=true

SELECT * FROM tabela WHERE
city='Warszawa' AND status='true' OR city='Kielce' AND status='true'

1. Po pierwsze to dlaczego w combobox posługujesz się stringami a nie PK, przecież Ateny są na mazurach ;) ?

2. To ci da może do myślenia:


.. WHERE district_id IN ( 11, 22, 33 ) AND status=true;


lub to

SELECT * FROM tabela WHERE
(city='Warszawa' OR city='Kielce') AND status='true'

to jak widać muszę za każdym razem dublować zapytanie miasto i
..
Z góry dziękuję za poświęcony czas i ewentualną pomoc.

Mam nadzieję, że dobrze zrozumiałem ;)

R.
Grzegorz M.

Grzegorz M. www.avatec.pl

Temat: Multiple query - wiele wartości dla jednego pola

Stary wielkie dzięki !! Nawet nie pomyślałem, by dać to w nawias, a już nawet logicznie to zmienia całe "równanie" - działa wyśmiecinie !! wielkie dzięki !!

Edit: Pierwotnie były int, ale zleceniodawca sobie zarzyczył by dać to tak no i tak zostało. Ale jestem naprawdę wdzięczny !! Raz jeszcze dzięki !!Grzegorz M. edytował(a) ten post dnia 09.11.10 o godzinie 15:01

konto usunięte

Temat: Multiple query - wiele wartości dla jednego pola

IN bardzo poprawia czytelność takich zapytań
SELECT * FROM tabela WHERE city IN('Warszawa','Kielce') AND status='true';
Ryszard Hapka

Ryszard Hapka Członek zarządu,
Dyrektor IT

Temat: Multiple query - wiele wartości dla jednego pola

Tomasz Fidos:
IN bardzo poprawia czytelność takich zapytań
SELECT * FROM tabela WHERE city IN('Warszawa','Kielce') AND status='true';
nie tylko czytelność :)
po za tym... polecam jako klucze jakieś inty, a nie varchary ( pewnie jeszcze 255, no nie? )

no i oczywiście na polach przeszukiwanych KONIECZNIE indexyRyszard "HaRy" Hapka edytował(a) ten post dnia 23.11.10 o godzinie 07:43
Michał Jarosz

Michał Jarosz Frontend Developer &
Team Leader

Temat: Multiple query - wiele wartości dla jednego pola

Ryszard "HaRy" Hapka:

nie tylko czytelność :)

A co jeszcze?
Ryszard Hapka

Ryszard Hapka Członek zarządu,
Dyrektor IT

Temat: Multiple query - wiele wartości dla jednego pola

Michał Jarosz:
Ryszard "HaRy" Hapka:

nie tylko czytelność :)

A co jeszcze?

szybkość wykonywania
Michał Jarosz

Michał Jarosz Frontend Developer &
Team Leader

Temat: Multiple query - wiele wartości dla jednego pola

Ryszard "HaRy" Hapka:
Michał Jarosz:

A co jeszcze?

szybkość wykonywania

Źródło?

[edit]

Ok. Pytałem się, bo do tej pory znałem tylko to źródło:
http://forge.mysql.com/wiki/MySQL_Internals_Optimizer#...

Ale zajrzałem do 'High Performance MySQL' i tam na stronie 169 piszą:
"In many database servers, IN() is just a synonym for multiple OR clauses, because the two are logically equivalent. Not so in MySQL, which sorts the values in the IN() list and uses a fast binarysearch to see whether a value is in the list. This is O(log n) in the size of the list, whereas an equivalent series of OR clauses is O(n) in the size of the list (i.e., much slower for large lists)."

Tak więc jeśli wierzyć chłopakom z Percony (a ja im wierzę) różnica jest, ale na dwóch czy trzech elementach niezauważalna.Michał Jarosz edytował(a) ten post dnia 23.11.10 o godzinie 13:45
Ryszard Hapka

Ryszard Hapka Członek zarządu,
Dyrektor IT

Temat: Multiple query - wiele wartości dla jednego pola

Michał Jarosz:
Ryszard "HaRy" Hapka:
Michał Jarosz:

A co jeszcze?

szybkość wykonywania

Źródło?

Tak więc jeśli wierzyć chłopakom z Percony (a ja im wierzę) różnica jest, ale na dwóch czy trzech elementach niezauważalna.


oczywiście, przy takiej małej ilości danych przeszukiwanych/szukanych różnicy nie będzie, a przynajmniej bedzie mało/nie znacząca, no ale...

już wiele razy przekonywałem się o tym, że dane mają to do siebie, że przyrastają

oczywiście głównie w tych miejscach, gdzie ich przechowywanie i obrabianie jest napisane na od.. to znaczy bez uwzględnienia ewentualnego przyrostu :)

dlatego... osobiście wolę pisać różne rzeczy optymalnie,
by danych w bazie było jak najmniej, by były optymalnie przechowywane, by były optymalnie przeszukiwane - wszystko z bardzo prostego powodu... im więcej danych, i im więcej ludzi z nich korzysta - tym "zoptymalizowanie" aplikacji jest trudniejsze.

wiem, że to sucha teoria i każdy ma na swoim koncie dzieła pisane na szybko i na odpierdziel, "bo przecież jest tylko 100 redkordów"

ale już daaawno pewien koleś - Murphy - udowodnił, że dane zachowują się zupełnie inaczej niż programista w aplikacji to przewidział ;P
Grzegorz M.

Grzegorz M. www.avatec.pl

Temat: Multiple query - wiele wartości dla jednego pola

Zrobiłem zgodnie z zaleceniem i dałem IN w wolnej chwili zrobie sobie bazę składającą się z kilku tysięcy wpisów i zobaczymy jak to się zachowa =)
Ryszard Hapka

Ryszard Hapka Członek zarządu,
Dyrektor IT

Temat: Multiple query - wiele wartości dla jednego pola

Grzegorz M.:
Zrobiłem zgodnie z zaleceniem i dałem IN w wolnej chwili zrobie sobie bazę składającą się z kilku tysięcy wpisów i zobaczymy jak to się zachowa =)

kilka tysięcy wpisów to nadal bardzo mało ;)

warto też pamiętać o jednym... wzrost o 0.01s w kilku tysiącach wywołań, to już kilka ładnych sekund więcej pracy procesora, dysków, pamięci, etc. ;-)

wszystko zależy od skali...

konto usunięte

Temat: Multiple query - wiele wartości dla jednego pola

Tuning ma dopiero sens jak Grzegorzowi wyjdzie aplikacja ;-)

Grzegorz: Lepiej się usability zajmij niż tym 0.01 sec.
Ryszard Hapka

Ryszard Hapka Członek zarządu,
Dyrektor IT

Temat: Multiple query - wiele wartości dla jednego pola

Rafał Wardas:
Tuning ma dopiero sens jak Grzegorzowi wyjdzie aplikacja ;-)

Grzegorz: Lepiej się usability zajmij niż tym 0.01 sec.

wydaje mi się, że kluczem do sukcesu jest pisanie w optymalny sposób od samego początku...

doskonale wiemy, że jeżeli sie tego nie zrobi od razu, to nie zrobi się nigdy ;-)
Grzegorz M.

Grzegorz M. www.avatec.pl

Temat: Multiple query - wiele wartości dla jednego pola

Dokłanie :-) Co się odwlece, to w końcu uciece :P hehe czy jak to tam szło :-)

konto usunięte

Temat: Multiple query - wiele wartości dla jednego pola

Ryszard "HaRy" Hapka:
Rafał Wardas:
Tuning ma dopiero sens jak Grzegorzowi wyjdzie aplikacja ;-)

Grzegorz: Lepiej się usability zajmij niż tym 0.01 sec.

wydaje mi się, że kluczem do sukcesu jest pisanie w optymalny sposób od samego początku...

doskonale wiemy, że jeżeli sie tego nie zrobi od razu, to nie zrobi się nigdy ;-)

Nie da się dzisiaj rozwijać softu/webaplikacji tak, żeby nie było długu technologicznego... Dzisiaj liczy się nie tylko to, żeby było zrobione dobrze, ale żeby jak najwcześniej wyszło poza środowisko DEV...

Następna dyskusja:

przeszukiwanie wg pola zawi...




Wyślij zaproszenie do