MySQL-Query: SELECT + LEFT JOIN etc.

MiLa

Erfahrenes Mitglied
HalliHallo,
ja auch ich melde mich mal wieder mit einer "kleinen" Frage!
Ich bin mir zwar grade etwas unsicher, ob das im PHP oder im mySQL Forum richtig aufgehoben ist, ich poste es einfach mal hier...

Ich bin grade dabei meine mySQL-Statements ein wenig aufzuräumen, dabei bin ich auf ein Problem gestoßen, welches ich nicht bewältigen kann.

Also hier erstmal der Query:
PHP:
$query=mysql_query("
SELECT flagg.link AS link, rang.name AS rang, comm.lang AS lang, comm.status AS status, comm.nick AS nick,comm.id AS id,comm.vorname AS vorname,comm.mail AS mail
FROM comm
LEFT JOIN rang
ON comm.rang = rang.id AND rang.id_2='".$_id."'

LEFT JOIN flagg
ON '[flag]comm.lang[/flag]' LIKE flagg.name AND rang.id_2='".$_id."'

WHERE comm.id_2='".$_id."' AND comm.team LIKE '%".$data1['id']."%'
ORDER BY rang
DESC");
Soweit so gut...das Problem an der ganzen Sache liegt jetzt hier:
Code:
'[flag]comm.lang[/flag]'
Ich möchte dort alle Dinge herausfiltern wo der Wert flagg.name wie der Wert des Feldes comm.lang ist, allerdings soll der Wert comm.lang vor der Überprüfung immer ein [flag] davor und ein [/flag] dahinter angehängt bekommen.
Nur weiss ich nicht, wie ich das in mySQL syntaktisch richtig schreibe...
Bei PHP hätte ich es jetzt so gelößt:
Code:
'[flag]'.$lang.'[/flag]'
Nur funktioniert das in mySQL nicht so wirklich ;-)

Ich habe es wirklich nirgends gefunden - vieleicht hab ich ja auch nur falsch gesucht...

Danke im Vorraus!
 
Zuletzt bearbeitet:
Oh..grade gesehen in dem Query sind noch nen paar andere Fehler *hups*
Hm, ich bin bisher noch nicht so bewandert in Sachen mySQL...aber man arbeitet dran ;-)

Super...die Seite hilft mir entscheidend weiter...
Und auch die Funktion CONCAT höert sich recht passend an...

Super...es funktioniert! Danke! :)

So, wo wir grade dabei sind, kann ich hier ja noch einen weiteren anzetteln:

Code:
SELECT teams.name AS name, teams.id AS id, teams.game AS game, REPLACE(games.bild,'../','') AS g_bild, games.name AS g_name, COUNT(*) AS members
FROM teams
LEFT JOIN games
ON teams.game = games.id AND games.id_2='".$_id."'
LEFT JOIN comm
ON comm.team LIKE '%teams.id%'
WHERE teams.active='1' && teams.id_2='".$_id."'
GROUP BY teams.id
ORDER BY teams.displayorder

Mein Problem hierbei ist, dass ich die Anzahl der Member in den jeweiligen Teams in 'members' haben möchte...
Nur leider gibt er mir bisher immer die Anzahl der Einträge in der Tabelle comm zurück.
Ist bestimmt mal wieder irgendwo ein klitzefitzelkleiner Denkfehler...


Achja...rang ist keien eindeutige Spalte...sollte sie es sein?
 
Zuletzt bearbeitet:
Code:
SELECT teams.name, teams.id, teams.game AS game, REPLACE(games.bild,'../','') AS g_bild, games.name AS g_name, COUNT(*) AS members
FROM teams
LEFT JOIN games
ON game = games.id AND games.id_2='".$_id."'
LEFT JOIN comm
ON comm.team LIKE '%teams.id%'
WHERE teams.active='1' && teams.id_2='".$_id."'
GROUP BY comm.team
ORDER BY teams.displayorder

So ich hoff es funktioniert. Ich habe mal die "AS"-Sachen rausgemacht, die du nicht in der Anweisung brauchst.
Du kannst zum Beispiel "teams.name" bei Verwendung von mysql_fetch_array auch über 'name' ansprechen. Deswegen brauchst du das "AS name" nicht :)

Und mit dem COUNT musst du mal schauen. Müsst aber gehen.

edit: Wo stehen denn deine ganzen Spieler drin? In welcher Tabelle Hab gerade nochmal alles nachgelesen und ich würde dir ja nur die Anzahl der Teams ausgeben :)

edit: das mit COUNT ... GROUP BY ist immer so ne Sache iwe ich gerade sehe. Versuche das mal. Hoffe das klappt nun. Hab mal das Group by geändert
 
Zuletzt bearbeitet:
Danke erstmal, aber bei deiner Vertsion bekomme ich ne kleine Fehlermeldung:
Code:
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 members FROM teams LEFT JOIN games (#1064)

Die User (Member) stehen un der Tabelle comm...
 
Hatte das Query nochmal verändert. Hast du mal geschaut ob es geht

Ist ja nur das Group By verändert und den Müll beim Count wieder weg gemacht :)
 
Hm, da zählt er nun die Teams...also irgendwas ist auch da nicht richtig...
Ich glaub ich sollt mir langsam echt mal nen mySQL Buch zulegen *gg*

Also vieleicht hilft dir das ja: in comm.team steht: für jedes Team in dem der User ist eine id und als Trennzeichen ein |. z.b. 6|3|2
 
Hmm ist immer so ne Sache :) Ich finde ein Query mit Group By ziemlich sch... :) Hab mich damit auch noch nicht genügend beschäftigt. Ich werd mir mal ne Tabelle anlegen und das mit GROUP By testen ;)
 
Ich würds ja gerne so zählen, aber der COUNT da verlangt nen GROUP BY...

Also wenn du ne andere Möglichkeit weisst innerhalb dieses Statements die Einträge aus comm zu zählen die die ID des Teams im Feld team stehen haben...
 
Also dein Query liest die User eines Team aus oder? Ich bastel nämlich gerade :)

Also am Ende werden nur die members eines Teams ausgegeben oder? So wie ich das Query verstehe ;)
 
Zurück