MySQL: Tabellen vereinen

  • Salut,

    ich habe mein Glück schon an anderen Stellen probiert, da konnte man mir aber leider nicht weiterhelfen. Vielleicht kennt sich hier jemand richtig gut mit SQL aus ;)

    Mein Problem:
    Ich habe zwei Tabellen, cms_articles mit den Artikeln meines CMS, cms_comments mit Kommentaren zu den Artikeln (dabei gibt die Spalte ARTICLE_ID die ID des entsprechenden Artikels an).

    Zum Anzeigen im Blog lasse ich mir von der Datenbank die Artikel ausgeben:

    SQL
    SELECT * FROM cms_articles WHERE $conditions $order $limit


    Da ich aber gleich noch zu jedem Artikel anzeigen möchte, wie viele Kommentare verfügbar sind, hätte ich gerne eine weitere Spalte im Ergebnis, in der die Anzahl der Kommentare zum jeweiligen Artikel steht.

    Und an diesem Punkt scheitere ich. Mit einem Tutorial habe ich noch folgendes zusammengebastelt:

    SQL
    SELECT ARTICLE_ID,count(distinct(ID)) FROM cms_comments GROUP BY ARTICLE_ID


    Das liefert mir die Anzahl der Kommentare zu jedem Artikel. Aber wie bastele ich das jetzt zusammen?


    Danke im Voraus,

    Stefan

  • SELECT cms_articles.*, ARTICLE_ID,count(distinct(ID)) AS comment_anzahl FROM cms_articles, cms_comments WHERE $conditions $order $limit GROUP BY ARTICLE_ID

    musst mal sehen ob das so passt und abgesehen davon kenn ich ja deine db nicht und du kannst das auch zur not einfach mit 2 abfragen machen

    zB so (comment anzahl für bestimmten artikel)
    SELECT COUT(*) AS anzahl FROM cms_comments WHERE ARTICLE_ID = 'id' LIMIT 1

    Sei immer du selbst. Außer du kannst Batman sein. Sei immer Batman!

  • Salut,

    ich habe mich jetzt für letzteres entschieden.

    Nachdem ich mir das nochmal durch den Kopf habe gehen lassen, nahm ich von obiger Variante Abstand, da ich da auch das Problem sehe, dass die Ergebnistabelle von MySQL wohl erst mal komplett zusammengestellt wird (d.h. für alle Einträge in cms_articles) und dann erst die Limitierung erfolgt.

    Bei momentan 190 Einträgen mag das Performance-mäßig noch annehmbar sein, aber bei mehreren Tausend Einträgen wird das wohl schon anders aussehen. Oder liege ich da falsch?


    Danke,

    Stefan

  • ich denke ja nicht, dass du alle gleichzeitig ausliest, wenn du 50 beiträge im vergleich zu 30 ausliest, dann sollten das nur unterschiede im bereich von millisekunden sein.
    aber ich würde auch die variante mit 2 abfragen nehmen

    Sei immer du selbst. Außer du kannst Batman sein. Sei immer Batman!