Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL]zapytanie porównujące kilka pól z kilkoma wartościami
skleps
post
Post #1





Grupa: Zarejestrowani
Postów: 142
Pomógł: 9
Dołączył: 3.03.2011

Ostrzeżenie: (0%)
-----


Mamy m.in. 3 kolumny kol1, kol2, kol3.
Szukamy rekordów, dla których którakolwiek z tych kolumn ma wartość 1 lub 2 lub 3.
Da się to jakoś ładniej rozpisać niż:
  1. SELECT * FROM tabela WHERE kol1=1 OR kol2=1 OR kol3=1 OR kol2=1 OR kol2=2 (... itditd)

czy też INem:
  1. SELECT * FROM tabela WHERE kol1 IN (1,2,3) OR kol3 IN (1,2,3) OR kol3 IN (1,2,3)

?

Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Pytanei z innej beczki: a czemu masz taką strukturę? Co tam jest, że tak - na pierwszy rzut oka - zrobiłeś to dziwnie?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
skleps
post
Post #3





Grupa: Zarejestrowani
Postów: 142
Pomógł: 9
Dołączył: 3.03.2011

Ostrzeżenie: (0%)
-----


Cytat(nospor @ 20.01.2012, 15:54:44 ) *
Pytanei z innej beczki: a czemu masz taką strukturę? Co tam jest, że tak - na pierwszy rzut oka - zrobiłeś to dziwnie?


Założmy że rekord to 1 abstrakcyjny towar. Towar ma cechy i oznaczenia, a każdy z dostawców trochę inaczej oznacza ten towar.
Towar jest jeden, ale musimy zapamiętać, jak poszczególni dostawcy go oznaczają.
I czasem trzeba znaleźć towar po tej cesze, ale bez wiedzy który to dostawca.
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




To może zamiast 3 kolumn dodać kolejną tabelę, w której będziesz zapisywał oznaczenia danego towaru przez danego dostawce.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
phpion
post
Post #5





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Faktycznie struktura bazy wydaje się być zrąbana. Możesz odwrócić IN i zrobić:
  1. SELECT * FROM tabela WHERE 1 IN (kol1, kol2)

I tak będziesz musiał wpisać wszystkie kolumny, ale zawsze to jakaś dodatkowa opcja.

Najprościej chyba będzie jednak jeśli zapytanie będziesz generował w pętli dopisując kolumny do warunku. Stwórz tablicę z tymi kolumnami i podstawiaj ją jakąś funkcją do zapytania.
Go to the top of the page
+Quote Post
skleps
post
Post #6





Grupa: Zarejestrowani
Postów: 142
Pomógł: 9
Dołączył: 3.03.2011

Ostrzeżenie: (0%)
-----


Struktura bazy nie jest zrąbana - musiałem na potrzeby pytania wymyśleć jakiś przykład, żeby za długo nie tłumaczyć.
Przy okazji pisania dodatków zaciekawiło mnie po prostu, czy istnieje taka notacja, która zrobiłaby czytelniejszym zapytanie, coś a'la:

  1. SELECT * FROM tabela WHERE (kol1,kol2,kol3) IN (1,2,3)


W moim faktycznym kodzie są raptem dwie kolumny: kol1 i kol2 więc żaden problem,
ale zaciekawiło mnie czy istnieje jakaś ogólna struktura zapytania na wypadek, gdyby tych kolumn było więcej - ot takie rozmyślania w trakcie kodowania smile.gif

Ten post edytował skleps 20.01.2012, 16:38:53
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 05:56