Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: samozłączenie ?
Forum PHP.pl > Forum > Bazy danych > MySQL
kalu111
Witam,
Posiadam tabelę:
  1. id_client | id_attr


gdzie id_client to identyfikatory różnych klientów a id_attr to id okereślnych parametrów(atrybtów), czyli klient moze posiadać klika parametrów.

Problem leży w budowie zapytania, aby pobrać tych klientów, który każdy z nich ma parametry o identyfikatorach np 3 i 5.
blooregard
  1. SELECT id_client, id_attr FROM tabela WHERE id_attr IN (3,5) GROUP BY id_client
erix
A LEFT JOIN + WHERE Ci nie wystarczy...?
kalu111
Cytat(blooregard @ 27.08.2009, 12:15:21 ) *
  1. SELECT id_client, id_attr FROM tabela WHERE id_attr IN (3,5) GROUP BY id_client


To nie pomoże bo zwróci klientów, którzy mają attr 3 lub 5, a chodzi mi o to, aby każdy wybrany klient posiadał 3 i 5
erix
grupuj po kliencie, sprawdzaj przez HAVING
kalu111
Cytat(erix @ 27.08.2009, 12:53:00 ) *
grupuj po kliencie, sprawdzaj przez HAVING

Prówbowałem z HAVING, ale zwraca mi 0 rekordów chyba, że złe tworze zapytanie.
Jeżeli to nie problem, czy można prosić o przykładowy KOD.
W tej materii jestem trochę słaby smile.gif
phpion
Cytat(kalu111 @ 27.08.2009, 13:22:53 ) *
Jeżeli to nie problem, czy można prosić o przykładowy KOD.

Problem to nie jest ale:

Cytat(kalu111 @ 27.08.2009, 13:22:53 ) *
Prówbowałem z HAVING, ale zwraca mi 0 rekordów chyba, że złe tworze zapytanie.

pokaż więc jak próbowałeś, a my postaramy się pomóc. Tylko nie pisz teraz "aaa usunąłem bo nie działało". Wysil się i spróbuj jeszcze raz - w końcu to Twój problem, a nie nasz winksmiley.jpg
thek
  1. GROUP BY klient HAVING atrybut = numer1 OR atrybut = numer2

Taka końcówka powinna zadziałać smile.gif
kalu111
  1. SELECT * FROM `clients` WHERE id_attr = 28 OR id_attr = 47 GROUP BY id_client

  1. SELECT * FROM `clients` WHERE id_attr IN (28,47) GROUP BY id_client

Te zapytania zwracają wszystko

  1. SELECT * FROM `clients`GROUP BY id_client HAVING id_attr = 28 OR id_attr = 47

Zwraca 0 rekordów

  1. SELECT `t1`.* FROM `clients` AS t1, `clients` AS t2 WHERE t1.id_attr = t2.id_attr AND t1.id_attr IN (28,47) GROUP BY t1.id_client

To zwraca to samo co 2 pierwsze
6nom
tak na szybko:

  1. SELECT id_client, id_attr FROM tabela WHERE id_attr = 3 AND id_client IN (SELECT id_client FROM tabela WHERE id_attr = 5)


ale Tobie pewnie chodzi o dowolna liczbe atrybutow, ktore beda porownywane?
kalu111
Cytat(6nom @ 27.08.2009, 14:32:16 ) *
ale Tobie pewnie chodzi o dowolna liczbe atrybutow, ktore beda porownywane?


Tak zgadza się, tu siedzi zonk właśnie.
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.