uwebaier - 36
Halbprofi
(offline)
Dabei seit 06.2005
124
Beiträge
|
|
Geschrieben am: 20.03.2008 um 20:36 Uhr
|
|
Hier eben mein Problem:
Ich mach grad an ner Onlinegalerie für mein Kumpel rum.
Zu jedem Bild gibt es Comments.
Ich möchte mit meinem Query Anzahl der Comments und Bilddaten auslesen..
Das könnte theoretisch so aussehen:
SELECT
Bild.Daten,
COUNT(Comments.*)
FROM
Bild,
Daten
WHERE
Bild.ID=Comments.BildID
Geht aber nich ..., die Funktion COUNT wird dann als Syntaxfehler gekennzeichnet
Mein Problem liegt also daran, die richtige Syntax für das auslesen der Anzahl der Comments zu finden...
Folgendes hab ich schon probiert:
- COUNT(Comments.*)
- COUNT(Comments)
- Comments.COUNT(*)
Geht alles nich...
Wäre schön wenn mir da einer Helfen könnte, das Problem jagt mich schon seit Ewigkeiten in Mysql.....
UT3 Sucks ^^
|
|
_blacksheep - 35
Fortgeschrittener
(offline)
Dabei seit 12.2005
90
Beiträge
|
|
Geschrieben am: 20.03.2008 um 20:40 Uhr
|
|
http://www.little-idiot.de/mysql/mysql-118.html
ich gehe mal davon aus, dass sich die comments in ner anderen tabelle als die bilder befinden.
|
|
_Julian_ - 38
Halbprofi
(offline)
Dabei seit 04.2005
160
Beiträge
|
|
Geschrieben am: 20.03.2008 um 20:47 Uhr
|
|
Vielleicht hilft es dir auch die "GROUP BY" "Funktion" anzuschauen. IMHO brauchst du die hierfür
|
|
uwebaier - 36
Halbprofi
(offline)
Dabei seit 06.2005
124
Beiträge
|
|
Geschrieben am: 20.03.2008 um 20:51 Uhr
|
|
Ich glaub ich sollte mir doch mal JOIN anlesen, hab das bisher alles immer ohne Gemacht xD
UT3 Sucks ^^
|
|
_Julian_ - 38
Halbprofi
(offline)
Dabei seit 04.2005
160
Beiträge
|
|
Geschrieben am: 20.03.2008 um 21:03 Uhr
|
|
du hast bereits eine Art des Joins verwendet auch wenn er nicht als solcher ersichtlich ist.
Man nennt ihn "Equijoin", kommt von Gleichsetzen
Bild.ID=Comments.BildID
Das ist der Join ...
|
|
uwebaier - 36
Halbprofi
(offline)
Dabei seit 06.2005
124
Beiträge
|
Geschrieben am: 20.03.2008 um 21:22 Uhr
Zuletzt editiert am: 20.03.2008 um 21:25 Uhr
|
|
Jo, so hab ich das bisher mit allem gemacht...
Aber nur kurz zum antesten:
Kann ich das Problem von mir auch ohne LEFT-RIGHT und was auch immer join machen?
Ich will nur eben testen ob mein Skript läuft...
Wenns interressiert, hier eben das ganze Query:
SELECT
Content.name,
Users.nick as creater,
Pictures.creater as createrID,
Pictures.description,
Pictures.ID,
COUNT(Comments.*) as commentcount,
Pictures.createdate
FROM
Content,
Users,
Pictures,
Comments
WHERE
Pictures.contentID=0 AND
Content.ID=Pictures.ID AND
Content.category='TPicture' AND
Users.ID=Pictures.creater AND
Comments.contentID=Pictures.ID AND
Comments.category='TPicture'
ORDER BY
name DESC
LIMIT
0, 30;
Und hier noch der Mysql-Fehlercode:
ERROR 1064:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '*) as commentcount, Pictures.createdate FROM Content, Users, Pictur' at line 7
UT3 Sucks ^^
|
|
rochus - 41
Profi
(offline)
Dabei seit 10.2004
536
Beiträge
|
Geschrieben am: 22.03.2008 um 01:10 Uhr
Zuletzt editiert am: 22.03.2008 um 01:18 Uhr
|
|
Du kannst keine Aggregatsfunktion (COUNT, MIN, MAX) in ein SELECT statement aufnehmen, das auch andere Dinge beinhaltet... -> Subselect:
SELECT B.Daten, (SELECT COUNT(C.ID) FROM Comments C WHERE C.BildID = B.ID)
FROM Bilder B
-> bei dir hast du auch ein COUNT(Comment.*) drin, das geht so an der Stelle nicht. zumal du niemals ein COUNT(*) machen solltest, sondern in jeder Tabelle eine ID, sonst was zur eindeutigen Identifizierung der Zeile haben solltest, auf das du den COUNT jagst. Das erspart dem DBMS arbeitszeit und dein skript wird schneller...
Grüße
bashian roulette: $ ((RANDOM%6)) || rm -rf /
|
|