Du bist nicht eingeloggt.

Login

Pass

Registrieren

Community
Szene & News
Locations
Impressum

Forum / Bits und Bytes

Count bei Abfrage von mehreren Tabellen Mysql

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 /

  [Antwort schreiben]

Forum / Bits und Bytes

(c) 1999 - 2026 team-ulm.de - all rights reserved - hosted by ibTEC Team-Ulm

- Presse - Blog - Historie - Partner - Nutzungsbedingungen - Datenschutzerklärung - Jugendschutz -