2016-06-20 12 views
1

Ich habe 3 TabellenErste Zählung byjoining mehrere Tabellen

1)question 
2)options 
3)answers 

Tabelle 1 enthält eine Liste von Multiple-Choice-Fragen. Tabelle 2 enthält mehrere Auswahlmöglichkeiten für die Frage.

Betrachten Sie ein Beispiel, ich habe die Frage "Welches Spiel magst du am meisten?"

Es ist in Tabelle 1 mit ID 1 gespeichert. Für diese Frage gibt es 3 Möglichkeiten in Tabelle 2; als "Cricket", "Fußball", "Tennis" mit IDs 1,2

Wenn ein Benutzer diese Frage beantworten die Frage ID und Option ID sind in der dritten Tabelle gespeichert, als ob er Fußball, Eintrag auswählen In Tabelle 3 ist Frage ID und Option ID.

Wenn ein anderer Benutzer dieselbe Option neuer Eintrag auswählen, wird in Tabelle 3 gespeichert

Mein Bedürfnis ist, dass ich die Anzahl der einzelnen Optionen in Tabelle 3.

Betrachten 10 Benutzer wählt Cricket erhalten mag, 15 Benutzer Fußball wählen, kein Benutzer Tennis auswählen, also muss ich als 10,15,0 mit der entsprechenden Option id

Tabellenname zählen: Fragen

-------------------------------- 
| id |  question   | 
-------------------------------- 
| 1 | which game u like most | 

Tabellenname: Optionen

------------------------------------------------ 
| id | qid |   option_name    | 
------------------------------------------------ 
| 1 | 1 |   cricket     | 
------------------------------------------------ 
| 2 | 1 |   football     | 
------------------------------------------------ 
| 3 | 1 |   tennis     | 
------------------------------------------------ 

Tabellenname: Antworten

-------------------------------------------- 
| id | qid | optionId      | 
-------------------------------------------- 
| 1 | 1 | 3        | 
--------------------------------------------- 
| 2 | 1 | 3        | 
---------------------------------------------- 
| 3 | 1 | 2        | 
---------------------------------------------- 

Die obige Tabelle bedeutet, dass 2 Personen Tennis wählen, 1 Menschen wählen, Fußball und niemand Cricket wählen. Also muß ich Ergebnistabelle als

------------------------------------------------------ 
| id | question    | option_name | count | 
------------------------------------------------------ 
| 1 | which game u like most | cricket  | 0 | 
------------------------------------------------------- 
| 2 | which game u like most | football | 1 | 
------------------------------------------------------- 
| 3 | which game u like most | tennis  | 2 | 
------------------------------------------------------- 

Aber als ich versuchte, habe ich nicht die Zählung für Cricket bekommen, weil niemand ausgewählt cricket.I muss Zählung des Cricket als 0 bekommen Kann mir jemand helfen, das Problem zu lösen? My SQL-Code ist

SELECT count(an.optionId) count , op.option_name, q.question from 
questions q, options op, answers an where q.id=1 
and q.id=op.qid 
and op.id=an.optionId 
group by q.question, op.option_name 

Antwort

2

Verwenden Sie einfach ein LEFT JOIN und COALESCE():

SELECT COALESCE(count(an.optionId),0) as count , op.option_name, q.question from 
questions q 
INNER JOIN options op 
ON(q.id=op.qid) 
LEFT OUTER JOIN answers an 
ON(p.id=an.optionId) 
where q.id=1 
group by q.question, op.option_name 

vermeiden Sie die Verwendung von Syntax impliziter join (durch Komma getrennt) und nur die korrekte Syntax einer Verknüpfung verwenden! LEFT JOIN mit impliziter Syntax immer schwerer zu lesen und leichter zu machen mistakjes.

+0

Funktioniert gut. Ich bin neu bei SQL, daher verbringe ich viel Zeit in dieser Abfrage. Vielen Dank –