Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] Wyciąganie skomplikowanych danych z bazy
Forum PHP.pl > Forum > Bazy danych > MySQL
robson_admin
Witam,

Mam bazę danych w której mam kolumny z cyframi (cyfra1, cyfra2,cyfra3,...,cyfra12).

Jakie napisać zapytanie SQL w którym podam kilka cyfr (3,4,5 lub 6) i jeżeli w danym wierszu znajdzie podane cyfry to wypisze wiersz...

Dla 6 i 5 cyfr napisałem zapytanie ale jest ono bardzo długie i dla 4 i 3 cyfr już nie potrafie;]

Wersja dla 6
  1. SELECT * FROM `xx` WHERE (cyfra1 = 1 OR cyfra2 = 1 OR cyfra3 = 1 OR ... OR cyfra12 = 1) AND (cyfra1 = 2 OR cyfra2 =21 OR cyfra3 = 2 OR ... OR cyfra12 = 2) AND (cyfra1 = 3 OR cyfra2 = 3 OR cyfra3 = 3 OR ... OR cyfra12 = 3) AND (cyfra1 = 4 OR cyfra2 = 4 OR cyfra3 = 4 OR ... OR cyfra12 = 4) AND (cyfra1 = 5 OR cyfra2 = 5 OR cyfra3 = 5 OR ... OR cyfra12 = 5) AND (cyfra1 = 6 OR cyfra2 = 6 OR cyfra3 = 6 OR ... OR cyfra12 = 6)


To zapytanie szuka czy są wiersze które zawierają liczy 1,2,3,4,5,6...

Dla 5 liczb zapytanie jest kilka razy dłuższe bo wchodzą kombinacje:/

O 4 i 3 liczbach nawet nie wspomnę...

Jest jakiś inny sposób na zrobienie zapytanie, które będzie działać i będzie krótsze?


Z góry dzięki!

Pozdrawiam
JoShiMa
Zamiast = używaj IN

  1. cyfra1 IN (3,4,5,6) OR cyfra2 IN (3,4,5,6) ...
Kicok
Jeżeli wszystkie z tych liczb mają się znaleźć w jednym wierszu, to:
  1. WHERE 1 IN ( cyfra1, cyfra2, cyfra3, ..., cyfra12 ) AND 2 IN ( cyfra1, cyfra2, cyfra3, ..., cyfra12 ) AND 3 IN ( cyfra1, cyfra2, cyfra3, ..., cyfra12 ) AND 4 IN ...



PS. Jeśli masz taką strukturę tabeli:
Kod
+------+----------+----------+----------+
|  ID  |  cyfra1  |  cyfra2  |  cyfra3  |
+------+----------+----------+----------+
|   1  |     3    |     4    |     5    |
|   2  |     1    |     8    |     9    |

to zastanów się, czy nie łatwiej byłoby ci przerobić ją na:
Kod
+------+---------------+-----------------+
|  ID  |  cyfra_numer  |  cyfra_wartosc  |
+------+---------------+-----------------+
|   1  |       1       |        3        |
|   1  |       2       |        4        |  
|   1  |       3       |        5        |
|   2  |       1       |        1        |
|   2  |       2       |        8        |  
|   2  |       3       |        9        |


Znacznie uprościłoby to tego typu zapytania.
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.