Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL]zapytanie porównujące kilka pól z kilkoma wartościami
Forum PHP.pl > Forum > Przedszkole
skleps
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)

?

nospor
Pytanei z innej beczki: a czemu masz taką strukturę? Co tam jest, że tak - na pierwszy rzut oka - zrobiłeś to dziwnie?
skleps
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.
nospor
To może zamiast 3 kolumn dodać kolejną tabelę, w której będziesz zapisywał oznaczenia danego towaru przez danego dostawce.
phpion
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.
skleps
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
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.