Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL] Wyciąganie skomplikowanych danych z bazy
robson_admin
post 31.07.2008, 09:38:34
Post #1





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 10.09.2005

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


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
Go to the top of the page
+Quote Post
JoShiMa
post 31.07.2008, 09:41:52
Post #2





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

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


Zamiast = używaj IN

  1. cyfra1 IN (3,4,5,6) OR cyfra2 IN (3,4,5,6) ...


Ten post edytował JoShiMa 31.07.2008, 09:42:48


--------------------
Go to the top of the page
+Quote Post
Kicok
post 31.07.2008, 11:21:11
Post #3





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

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


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.


--------------------
"Sumienie mam czyste, bo nieużywane."
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 Wersja Lo-Fi Aktualny czas: 20.07.2025 - 08:17