Marko: Denksportaufgabe für MySQL-Gurus :-)

Hallo MySQL Gurus,

ein kniffliges MySQL Problem:

Ich habe 2 Tabellen:

Tabelle Links

LinkID (Primärindex)
CatID  (Kategoriezuordnung, Verknüpfung mit jetzt unwichtiger 3. Tabelle)
Diverse Datenfelder

Tabelle Kommentare
LinkID (jeder Kommentar wird einem Link aus Tabelle Links zugeordnet)
Kommentartext
Diverse Datenfelder

Die Abfrage soll mir nun Liefern:

Alle Datensätze aus Tabelle Links, die zu einer Bestimmten CatID gehören:
SELECT * FROM Links WHERE CatID=45

Dazu aber noch die Anzahl der Kommentare in Tabelle Kommentare die zu jedem Ergebnissatz gehören:

SELECT COUNT(LinkID) FROM Kommentare WHERE LinkID= ?Entsprechende Zeilen LinkID im 1.Select Statement?

Ein UNION Statement geht nicht (kein MySQL 4.0 zur Verfügung), das UNION mit Temporären Tabellen
 nachbilden ist eigentlich auch kein Problem, aber was gebe ich im Count-Statement für die LinkID an ?
Die muss ja auf die Entsprechende Zeile Passen.
Die Möglichkeit 1 Query pro Zeile aus PHP abzustzen geht natürlich, ist mir aber aus Performance Gründen unlieb.

vielen Dank falls mir da jemand einen kleinen Tip geben kann, bin in SQL echt nicht fit.

Gruss

Marko

  1. salute marko,

    vielleicht mit 'join'?

    bsp.:
    SELECT * FROM links JOIN kommentare WHERE LinkIDA = LinkIDB;

    gruss -> jo

    Hallo MySQL Gurus,

    ein kniffliges MySQL Problem:

    Ich habe 2 Tabellen:

    Tabelle Links

    LinkID (Primärindex)
    CatID  (Kategoriezuordnung, Verknüpfung mit jetzt unwichtiger 3. Tabelle)
    Diverse Datenfelder

    Tabelle Kommentare
    LinkID (jeder Kommentar wird einem Link aus Tabelle Links zugeordnet)
    Kommentartext
    Diverse Datenfelder

    Die Abfrage soll mir nun Liefern:

    Alle Datensätze aus Tabelle Links, die zu einer Bestimmten CatID gehören:
    SELECT * FROM Links WHERE CatID=45

    Dazu aber noch die Anzahl der Kommentare in Tabelle Kommentare die zu jedem Ergebnissatz gehören:

    SELECT COUNT(LinkID) FROM Kommentare WHERE LinkID= ?Entsprechende Zeilen LinkID im 1.Select Statement?

    Ein UNION Statement geht nicht (kein MySQL 4.0 zur Verfügung), das UNION mit Temporären Tabellen
    nachbilden ist eigentlich auch kein Problem, aber was gebe ich im Count-Statement für die LinkID an ?
    Die muss ja auf die Entsprechende Zeile Passen.
    Die Möglichkeit 1 Query pro Zeile aus PHP abzustzen geht natürlich, ist mir aber aus Performance Gründen unlieb.

    vielen Dank falls mir da jemand einen kleinen Tip geben kann, bin in SQL echt nicht fit.

    Gruss

    Marko

  2. Hi,
    der LEFT JOIN ist dein Freund:
    SELECT COUNT(c.LinkID), l.* AS komm_count
    FROM links AS l
    LEFT JOIN kommentare AS c
    ON l.LinkID = c.linkID
    WHERE l.CatID = 45
    GROUP BY l.linkID

    ^ohne garantie ;)

    Jan
    --

    1. Vielen Dank, es scheint zu funktionieren.

      Gruss

      Marko