2012-04-04 13 views
1

ich, wie viele Datensätze aus einer anderen Tabelle in der gleichen SELECT-Anweisung zählen möge, verwendet i Left beitreten und in der select-Anweisung setzen i count (ag. *) siehe Beispiel:
count (*) in mysql Rückkehr nur einen Datensatz

$q = Doctrine_Query::create() 
      ->select("a.answer_id,a.date_added , count(ag.content_id) AS agree_count") 
      ->from('Answer a') 
      ->leftJoin("a.Agree ag ON a.answer_id = ag.content_id AND ag.content_type = 'answer' ") 
      ->where('a.question_id= ? ', $questionId) 

Aber es ist nur der erste Datensatz zurückkehrt, kann ich das beheben? oder um einen anderen Tisch zu machen und ihn nur zum Zählen zu machen?

+0

Sie haben eine Where-Klausel, die 'question_id' behebt. Sind Sie sicher, dass mehr Zeilen zu erwarten sind? – Sirko

+0

Auf welchen Output hofften Sie? Möchten Sie, dass das Attribut "accept_count" die gesamte Liste zählt und auch in jeder einzelnen Zeile enthalten ist? – Dan

Antwort

5

Sie vermissen eine GROUP BY in Ihrer Abfrage.

Mehr Infos here.

Wenn Sie nicht über eine GROUP BY-Klausel, ist es normal, nur eine Reihe zu bekommen.

+0

danke, es hat jetzt funktioniert – KJA

+0

sicher, danke nochmal – KJA

0

Count (*) gibt nur einen Datensatz zurück, wenn Sie Group By nicht verwenden. Sie fragen, ob alle Datensätze gezählt werden sollen. Es kann also nur ein Ergebnis geben.

0

Die SQL-Funktion count() ändert, wie Ergebnisse von der Datenbank zurückgegeben werden - ohne GROUP BY gibt die Datenbank nur einen Datensatz zurück, unabhängig von anderen Spalten in SELECT.

, wenn Sie hinzufügen:

group by a.answer_id 

bis zum Ende Ihrer SQL-Abfrage, die DWYM könnten.