Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> proste zapytanie, relacja jeden do wielu
damiankopiec
post
Post #1





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 23.02.2009
Skąd: Jelenia Góra

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


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

Ten post edytował damiankopiec 3.12.2009, 10:32:24
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
phpion
post
Post #2





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




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.
Go to the top of the page
+Quote Post
Indeo
post
Post #3





Grupa: Zarejestrowani
Postów: 295
Pomógł: 7
Dołączył: 26.03.2004
Skąd: Opole

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


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 (IMG:style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.08.2025 - 16:58