2017-05-10 21 views
0

Okay, so ich drei (3) Tabellen, die ich zusammenSQL Join mit Unterabfrage Zählen Anzahl der Datensätze mit der gleichen ID in einem anderen Tisch

  • tableA wird die wichtigsten Details und Primärschlüssel anschließen möchten row_id ist für einen bestimmten row_id
autoinkrementierten
  • tableB die exteded Details und Primär-/Fremdschlüssel ist row_id von tableA
  • TableC speichert ungeordnete Bewertungen und Kommentare kommen ist

    Ich möchte all diese Tabellen verknüpfen, so dass ich alle Details für ein row_id und die avg Bewertung sowie die Anzahl der Instanzen in TableC sehen kann.

    SELECT * 
    FROM `tableA` A 
    LEFT JOIN `tableB` B 
         ON A.`row_id` = B.`row_id` 
    LEFT JOIN (
        SELECT COUNT(1) AS 'count', Avg(`row_rating`) AS 'avg' 
        FROM `tableC` 
        GROUP BY tableC.`row_id` 
    )C 
        ON C.`row_id` = A.`row_id` 
    
    ORDER BY C.`avg` ASC 
    

    Das Ergebnis dieser Abfrage kombiniert alle ordnungsgemäß, aber die gleiche Anzahl und avg wird in allen Zeilen angezeigt.

  • +0

    Diese nicht php ist. Etikettieren Sie es nicht als so .. – clearshot66

    +0

    Aber der Inhalt ist mysql und nicht mit php/php Frage irgendwelcher Art – clearshot66

    Antwort

    1

    Sieht aus wie Sie die Datensätze von row_id in innere Abfrage gruppieren möchten. In diesem Fall müssen Sie SELECTrow_id statt COUNT(1), versuchen Sie dies:

    SELECT * 
    FROM `tableA` A 
    LEFT JOIN `tableB` B 
         ON A.`row_id` = B.`row_id` 
    LEFT JOIN (
        SELECT row_id, Avg(`row_rating`) AS 'avg' 
        FROM `tableC` 
        GROUP BY tableC.`row_id` 
    )C 
        ON C.`row_id` = A.`row_id` 
    
    ORDER BY C.`avg` ASC 
    
    +0

    Das war es, hatte die 'row_id' in die Unterabfrage hinzuzufügen. Das einzige Ding ist, verursacht doppelte Daten in der Reihe. Aber es sollte für das funktionieren, was ich brauche. –

    +0

    Danke für die schnelle Antwort! –

    +0

    Um Dups zu entfernen, müssen Sie möglicherweise eine andere GROUP BY in der äußeren Abfrage verwenden. Es ist jedoch schwierig zu kommentieren, ohne die genaue Ausgabe zu kennen. –

    Verwandte Themen