Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Relacyjne tabele, wyszukanie rekordu wylacznie dla podanych kategorii
dr.neeb
post 16.09.2013, 10:07:09
Post #1





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 15.09.2013

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


Czesc.

Mam 3 tabele - questions, countries, questions_has_countries

questions : id, question
countries : id, name
questions_has_countries : questions_id, countries_id

Chcialbym wyselekcjonowac takie pytanie ktore ma TYLKO w powiazanych np. panstwa 1 i 2, a nie ze zawiera
jedno z tych dwoch.


Probowalem w ten sposob ale bez sukcesu :

  1. SELECT q.question, q.id , c.id
  2. FROM questions AS q, countries AS c, questions_has_countries AS qhc
  3. WHERE c.id = qhc.countries_id
  4. AND qhc.questions_id = q.id
  5. AND c.id IN (1,2)
  6. GROUP BY q.question
  7. HAVING COUNT( qhc.countries_id ) = 2


5 linijka zawza mi rekordy i counter przestaje dzialac poprawnie. Zakladam ze podchodze do tego ze zla logika zatem potrzebuje POMOCY ! smile.gif

Wywalic 5 linijke
i NADPISAC HAVING nastepujaco :

  1. HAVING SUM(c.id IN (1,2)) = 2 AND
  2. COUNT(DISTINCT c.id) = 2


Znalazlem opowiedz smile.gif

Ten post edytował dr.neeb 16.09.2013, 10:01:59
Go to the top of the page
+Quote Post
mmmmmmm
post 16.09.2013, 11:13:10
Post #2





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

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


A wiesz co to robi? Wydaje mi się to bezsensowne. Chyba wystarczy tylko Count(DISTINCT c.id).
Poza tym zapytanie jest skopane. Masz zły GROUP BY - powinien być GROUP BY q.question, q.id , c.id
A z łączenia tabel za pomocą WHERE zrezygnowano w ANSI SQL-92
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: 18.07.2025 - 00:29