Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Zwracanie rekordów spełniających wszystkie kryteria
proffix
post 16.07.2007, 22:03:44
Post #1





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 16.07.2007

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


Witam,

mam następujący problem z wyciągnięciem z tabeli tylko tych id , które jednocześnie spełniają wszystkie kryteria wyszukiwania. Struktura tabeli wygląda następująco:

fields_products_id int(11) - klucz, autoincrement
field_id smallint(5)
products_id smallint(5)

W tabeli znajdują się różne rekordy mające te same wartości products_id.Przykładowo mamy produkt A o jednym products_id który jednocześnie posiada 3 rekordy z field_id = 1,2,3 i produkt B mający tylko 2 rekordy field_id = 1,3.

Staram się wyciągnąć z bazy tylko te products_id które spełniają jednocześnie warunek posiadania field_id = 1,2 i 3. Metody jakich próbowałem również nie działają:

1. Prosta kwerenda SELECT * FROM tabela WHERE field_id = 1 and field_id = 2 and field_id = 3
Nie zwraca niczego.

2. Podobnie j.w. jest przy stosowaniu więcej niż jednego AND .

3. SELECT * FROM tabela WHERE field_id IN (1,2,3)
Zwraca również te produkty które nie mają 2 ale posiadają przynajmniej jedną z pozostałych wartości

4. Podkwerendy też nie tj. nie zwracają niczego lub zwracają wszystkie rekordy

Nie wiem już kompletnie jak się do tego zabrać. Najprostsze rozwiązania już wykorzystałem, a niestety nie jestem Guru SQL.

Z góry dziękuję za pomoc smile.gif

Pozdrawiam
Adam
Go to the top of the page
+Quote Post
joebezucha
post 16.07.2007, 22:18:03
Post #2





Grupa: Zarejestrowani
Postów: 43
Pomógł: 1
Dołączył: 23.05.2007
Skąd: Gliwice

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


Nie wiem czy to zadziala:) ale sprawdz

  1. SELECT products_id, COUNT(field_id) AS 'zlicz'
  2. FROM tabela WHERE field_id = 1 OR field_id = 2 OR field_id = 3
  3. GROUP BY products_id
  4. HAVING zlicz = 3
Go to the top of the page
+Quote Post
Riggs
post 17.07.2007, 08:26:46
Post #3





Grupa: Zarejestrowani
Postów: 162
Pomógł: 13
Dołączył: 16.06.2007

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


  1. <?php
  2. SELECT * FROM tabela WHERE field_id = 1 and field_id = 2 and field_id = 3
  3. ?>


Zamiast AND użyj OR, bo to zapytanie szuka pól których wartość pola field_id jest jednocześnie równa 1, 2 i 3.
Go to the top of the page
+Quote Post
proffix
post 17.07.2007, 10:52:38
Post #4





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 16.07.2007

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


Dziękuję wszystkim za pomoc. Udało się smile.gif)

Z testu wynika że niezależnie czy jest and czy or , wyniki zwracane są prawidłowo. Dla mnie zupełnie nielogiczne ale cóż biggrin.gif
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: 14.08.2025 - 10:37