MYSQL - ABFRAGE COUNT() mit JOINS

hmmNaGut

Erfahrenes Mitglied
Hallo,
Ich habe ein Problem mit einer ABFRAGE
und zwar würde ich gerne von einer Tabelle die ARTIKEL abfragen - So auch kein Problem.

Die Daten des Users abfragen so auch kein Problem.

Abfragen eines Bildes wenn eines vorhanden ist und anzeigen zum Artikel auch kein Problem.

So und nun mein Problem.

Ich Frage eine Extra Tabelle ab in dennen Antworten von Artikeln stehen
ich würde gerne die Anzahl bekommen wieviele Kommentare/Antworten zu diesen Artikel vorhanden sind.



PHP:
		$query="SELECT hits,
							artikel.id, 
							artikel.erdatum,
							artikel.erZeit, 
							artikel.titel, 
							LEFT(artikel.inhalt, 400)  as inhaltt,
							username, 
							benutzer_id,
							pic_path as pic,
							COUNT(*) as cAnswer
						FROM 
							benutzer,
							artikel
						LEFT JOIN
							artikel_pic
						ON
							(artikel_pic.artikel_id=artikel.id AND width<151)
						LEFT JOIN
							artikel_antwort
						ON
							(artikel_antwort.artikel_id=artikel.id)													
						WHERE catid='$_GET[categoryid]'
						 AND benutzer.benutzer_id=artikel.userid
						 AND artikel_antwort.artikel_id=artikel.id
						 GROUP BY artikel_antwort.artikel_id
						ORDER BY erDatum DESC
						 LIMIT 30";
 
Hi,

das geht doch mit:

Code:
select count(Spaltenname) from Tabelle

oder habe ich dich falsch verstanden? Sind denn die Antworten in einer Spalte vorhanden?



Gruß
 
Hmm, vielleicht hast du es falsch verstanden ich könnte theoretisch einen 2 Query machen um rein nur

SELECT Count(artikel_antwort.artikel_id) from artikel_antwort where artikel_id=? GROUP BY artikel_id;

Da würde ich ja auch zum Ziel kommen allerdings würde ich das gerne wenn es die Möglichkeit gibt alles in einen Query machen.

Leider ist es so das 5 Antworten 11 Anworten ausgeben werden obwohl es ja eigentlich nicht stimmt hmm.

Zu dem werden aus irgend einen Grund auch nicht 30 Datensätze angezeigt ausser ich nehme den Join mit Artikel_antwort raus.
Dann funktionierts Problem los..

PS: Die Antworten sind in einer Extra -TABELLE
(Es sind ca. 1000 Datensätze zu Testzwecken drinnen)

Danke für die schnelle antwort
 
Ok ich denke ich weiß was du meinst und es sollte so gehen:

SQL:
SELECT hits,
	artikel.id, 
	artikel.erdatum,
	artikel.erZeit, 
	artikel.titel, 
	LEFT(artikel.inhalt, 400)  as inhaltt,
	username, 
	benutzer_id,
	pic_path as pic,
	COUNT(*) as cAnswer
FROM benutzer
JOIN artikel ON benutzer.benutzer_id = artikel.userid
LEFT JOIN artikel_pic ON artikel_pic.artikel_id=artikel.id AND width<151
LEFT JOIN artikel_antwort ON artikel_antwort.artikel_id=artikel.id
WHERE catid='$_GET[categoryid]'
GROUP BY artikel.artikel_id, artikel.erdatum, artikel.erZeit, artikel.titel, inhaltt, username, benutzer_id, pic
ORDER BY erDatum DESC
LIMIT 30

Ich hab den Join auf die Tabelle artikel auch umgebaut, da ich nicht gerne alte und neue Syntax mische.
 
Danke olgs,
Habe gerade gesehen das es ja eigentlich doch funktioniert allerdings wird mir wenn keine
artikel_antwort vorhanden ist automatisch eins zurückgeben

Hat vielleicht jemand einen Vorschlag.
 
Zuletzt bearbeitet:
Meine Lieben :)

Ich habe die Lösung gefunden *freu*

Nein manchmal muss man halt das Hirn einstalten.

Ich danke euch allen für eure Tatkräftige Unterstütztung.

Hier meine kleine Lösung es liegt am count(*) ich sollte halt count(artikel_antwort.id) dann funktionierts.

Code:
SELECT hits,
        artikel.id, 
        artikel.erdatum,
        artikel.erZeit, 
        artikel.titel, 
        LEFT(artikel.inhalt, 400)  as inhaltt,
        username, 
        benutzer_id,
        pic_path as pic,
        COUNT(artikel_antwort.id) as cAnswer
FROM artikel
JOIN benutzer ON benutzer.benutzer_id = artikel.userid
LEFT JOIN artikel_pic ON artikel_pic.artikel_id=artikel.id AND width<151
LEFT JOIN artikel_antwort ON artikel_antwort.artikel_id=artikel.id
WHERE catid='$_GET[categoryid]'
GROUP BY artikel.id, artikel.erdatum, artikel.erZeit, artikel.titel, inhaltt
ORDER BY erDatum DESC
LIMIT 30
 
PHP:
SELECT hits,
        artikel.id, 
        artikel.erdatum,
        artikel.erZeit, 
        artikel.titel, 
        LEFT(artikel.inhalt, 400)  as inhaltt,
        username, 
        benutzer_id,
        pic_path as pic,
        COUNT(artikel_antwort.id) as cAnswer
FROM artikel
JOIN benutzer ON benutzer.benutzer_id = artikel.userid
LEFT JOIN artikel_pic ON artikel_pic.artikel_id=artikel.id AND width<151
LEFT JOIN artikel_antwort ON artikel_antwort.artikel_id=artikel.id
WHERE catid='$_GET[categoryid]'
GROUP BY artikel.id, artikel.erdatum, artikel.erZeit, artikel.titel, inhaltt
ORDER BY erDatum DESC
LIMIT 30

Hi habe noch ein kleines Problem...

Ich habe fünf Bilder zu einen Artikel das Problem ist jetzt das es ja eigentlich auch Problemlos funktioniert aber das wenn ich 3 Bilder
und 3 Antworten habe dann gibt er als Antworten 9 aus, dabei sind es ja nur 3.

(Für mich ist auch nur ein Bild Interessant bei der Auflistung der Artikel)
(Wenn kein Bild vorhanden ist zu dem Artikel klappt die Abfrage wieder perfekt)

Danke
 
Zurück