Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: proste zapytanie
Forum PHP.pl > Forum > Bazy danych
damiankopiec
Witam,

mam straszny problem z jak mi sie wydaje banalnym zapytaniem. Przypuśćmy, że w bazie są dwie tabele:

ca_object
- object_id

ca_object_value
- value_id
- object_id
- value

tabela ca_object jest z tabelą ca_object_value w relacji 1:n, w tabeli ca_object_value są dane:

value_id | object_id | value
1 | 12 | zielony
2 | 12 | czerwony
3 | 12 | czarny

i teraz moje pytanie: w jaki sposób mogę pobrać wszystkie obiekty (z tabeli ca_object ), które są i zielone i czarne?

Bardzo proszę o pomoc
phpion
Nie podam Ci gotowego rozwiązania ale naprowadzę: musisz użyć grupowania (GROUP BY), warunku dla koloru (WHERE kolor='zielony' OR kolor = 'czarny'), potem (i to najważniejsze) HAVING COUNT(*) = 2. Użycie HAVING wymusi dopasowanie dokładnie obu tych kolorów dla danego obiektu.
Indeo
To nic trudnego i można to zrobić na kilka sposobów.
Np stosując podzapytania:
  1. SELECT * FROM ca_object WHERE
  2. (object_id IN (SELECT object_id FROM ca_object_value WHERE value='zielony'))
  3. AND
  4. (object_id IN (SELECT object_id FROM ca_object_value WHERE value='czarny'))


albo wykorzystując operacje na agregacie:
  1. SELECT O.*,group_concat(V.value) AS test
  2. FROM ca_object O
  3. INNER JOIN ca_object_value V ON O.object_id=V.object_id
  4. GROUP BY O.object_id HAVING
  5. (test LIKE '%zielony%czarny%') OR (test LIKE '%czarny%zielony%')


Pozdrawiam winksmiley.jpg
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.