Ilja: Mit INNER JOIN 3 Tabellen verbinden

Beitrag lesen

yo,

mysql 4.1.10

das ist gut, damit kann dein dbms unterabfragen.

Von der dritten Tabelle, die präfix_kommentare heißt, brauche ich den count(*), wieviele Kommentare (Zeilen) von "where C.userid=1" in der Spalte Userid vorhanden sind.

das baust du komplett als unterabfragen in die SELECT klausel ein, da sie unabhängig ist.

select A.kategorie, A.name, A.beschreibung, A.themen, A.antworten, MAX(B.thumbname),
(SELECT COUNT(*) FROM präfix_kommentare WHERE userid=1) AS Anzahl
from präfix_galerie AS A
INNER JOIN präfix_galeriebilder AS B on A.kategorie=B.kategorie
GROUP BY A.kategorie, A.name, A.beschreibung, A.themen, A.antworten
;

es kann gut sein, dass eine fehlermeldung kommt, bei oracle wäre es meiner meinung so. dann musst du die unterabfrage noch aggregieren.

select A.kategorie, A.name, A.beschreibung, A.themen, A.antworten, MAX(B.thumbname),
MAX((SELECT COUNT(*) FROM präfix_kommentare WHERE userid=1)) AS Anzahl
from präfix_galerie AS A
INNER JOIN präfix_galeriebilder AS B on A.kategorie=B.kategorie
GROUP BY A.kategorie, A.name, A.beschreibung, A.themen, A.antworten
;

In der Tabelle präfix_kommentare ist der PK auf kommentarid. Hatte mir überlegt, ob ich den auf galerieid setzen soll oder auf kommentarid, deshalb lautete meine Frage, ob ich zwei PK's setzen kann,da man die Tabelle öfters mit galerieid und kommentarid anspricht.

kommentarid scheint mir der richtige PK zu sein. galerieid hört sich nach einem Fremdschlüssel an und der kann dann mehrfach mit dem gleichen wert in der tabelle vorkommen, ansonsten wäre es ja eine 1:1  Beziehung.

Man darf PK und schlüssel nicht miteinander verwechseln. selbst wenn es eine weitere spalte innerhalb einer tabelle gibt, die eindeutige werte hat und nicht null ist, selbst dann ist das kein zweiter PK, sondern eine ganz normale spalte. Oftmals wird sie auch alternatekey genannt. und sicherlich kann man darauf auch einen unique index legen, dass macht die spalte aber immer noch nicht zu einem weiteren PK. den kann es nur einmal in der tabelle geben.

Ilja