Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Warunki na podstawie drugiej tabeli., Domyslam sie ze proste, ale nie mam pomyslu.
paxton
post 26.08.2011, 02:52:14
Post #1





Grupa: Zarejestrowani
Postów: 66
Pomógł: 1
Dołączył: 22.06.2009
Skąd: Londyn, UK

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


Witam,


Mam dwie tabele:

products - id, name
products_quote_info - id, product_id, key, value

Produkty maja po kilka rekordow w tabeli products_quote_info, potrzebuje wyciagnac teraz te produkty ktore dla przykladu:
Cytat
key = "product" value = "post" ORAZ key = "place" value = "indoor"


Jesli jakis z tych warunkow sie nie zgadza, ma nie zwracac tego produktu. Ogolnie chodzi o to, ze w tej drugiej tabeli jest cos na wzor specyfikacji, potrzebuje wyciagnac produkty ktorych specyfikacja jest dokladnie taka jaka potrzebuje.

Prosze o pomoc.

Dziekuje
Go to the top of the page
+Quote Post
wookieb
post 26.08.2011, 07:16:20
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




O INNER JOIN słyszał? snitch.gif


--------------------
Go to the top of the page
+Quote Post
paxton
post 26.08.2011, 12:53:57
Post #3





Grupa: Zarejestrowani
Postów: 66
Pomógł: 1
Dołączył: 22.06.2009
Skąd: Londyn, UK

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


Juz próbowałem, sam INNER JOIN mi tu chyba nic nie pomoże.

Probowalem cos takiego:
  1. SELECT * FROM products INNER JOIN products_quote_info AS a ON a.product_id = products.id WHERE (a.KEY = "product" AND a.value = "post") AND (a.KEY = "place" AND a.value = "indoor")


Ale oczywiście to nie działa, ale może zrozumiesz o co mi chodzi po przeczytaniu SQL.
Go to the top of the page
+Quote Post
luckyps
post 26.08.2011, 13:25:46
Post #4





Grupa: Zarejestrowani
Postów: 153
Pomógł: 41
Dołączył: 28.06.2011
Skąd: Częstochowa

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


Pisane z glowy, wiec pewnie sa byki wink.gif ale moze to Cie jakos naprowadzi na rowiazanie...

  1. SELECT products.id, count(*) FROM products INNER JOIN products_quote_info AS a ON a.product_id = products.id
  2. WHERE (a.KEY = "product" AND a.value = "post") OR (a.KEY = "place" AND a.value = "indoor")
  3. GROUP BY products.id
  4. HAVING count(*) > 1
Go to the top of the page
+Quote Post
paxton
post 26.08.2011, 13:49:34
Post #5





Grupa: Zarejestrowani
Postów: 66
Pomógł: 1
Dołączył: 22.06.2009
Skąd: Londyn, UK

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


Działa! smile.gif Dzieki za pomoc.

Pełne rozwiązanie:

  1. SELECT products.name, count(*) FROM products INNER JOIN products_quote_info AS a ON a.product_id = products.id
  2. WHERE (a.KEY = "product" AND a.value = "post") OR (a.KEY = "place" AND a.value = "indoor")
  3. GROUP BY products.id
  4. HAVING count(*) = 2


Szczerze powiedziawszy myślałem nad tym rozwiązaniem, ale myślałem ze samo SQL sobie poradzi bez podawania jej ilości argumentów.

Ten post edytował paxton 26.08.2011, 13:50:55
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: 15.06.2025 - 14:12