Treffer aus zweiter Tabelle zählen
Thorsten
- datenbank
Ich habe zwei Tabellen. Ich frage die erste Tabelle ab und gebe sie anschliessend über PHP,HTML aus.
SELECT id, name FROM games ORDER BY id DESC
Das mache ich über eine Tabelle, in einer WHILE Schleife!
Bei jedem Durchgang berechne ich die Anzahl der Treffer in einer weiteren Tabelle
SELECT count(*) AS anzahl FROM games_player WHERE id_player='$abfrage_treffer_von_erster_abfrage->id'
So das ich am Schluss folgendes Habe:
id! Name ! Treffer
1 ! andreas ! 20
2 ! berta ! 12
3 ! Artur ! 1
Ich denke das, das eigentlich sehr bescheuert ist, nun würd ich gerne meine beiden SELECT Anweisungen zu einer einzigen zusammenfügen.
Kann mir jemand dabei helfen?
Thorsten
Ich denke das, das eigentlich sehr bescheuert ist, nun würd ich gerne meine beiden SELECT Anweisungen zu einer einzigen zusammenfügen.
Du möchtest Dich mit JOIN MySQL beschäftigen.
SELECT a.`id`, a.`name`, b.`anzahl`
FROM a.`games`
LEFT JOIN b.`games_player` ON b.`id_player` = a.`id`
ORDER BY a.`id` DESC
LG
Jenny
SELECT a.id
, a.name
, b.anzahl
FROM a.
games
LEFT JOIN b.games_player
ON b.id_player
= a.id
ORDER BY a.id
DESC
Nur zur Info (hab ich im ersten Posting vergessen):
Der o.a. Code ist NICHT 1:1 übertragbar, weil die Syntax nicht stimmt. Du musst Dich schon mit dem Thema beschäftigen. ;)
LG
Jenny
Hi!
Der o.a. Code ist NICHT 1:1 übertragbar, weil die Syntax nicht stimmt. Du musst Dich schon mit dem Thema beschäftigen. ;)
Es muesst auch noch n count und n group by rein.
Tach!
Ich denke das, das eigentlich sehr bescheuert ist, nun würd ich gerne meine beiden SELECT Anweisungen zu einer einzigen zusammenfügen.
Das geht zum Beispiel mit einer Correlated Subquery à la:
SELECT felder, (SELECT COUNT(*) FROM tabelle2 WHERE tabelle1.feld=tabelle2.feld) aliasname FROM tabelle1
dedlfix.
SELECT count(*) AS anzahl FROM games_player WHERE id_player='$abfrage_treffer_von_erster_abfrage->id'
Ein SELECT count() dürfte ohne GROUP BY einen Fehler verursachen.
Vorgehensweise: Du ergänzt die Personentabelle mit der Treffertabelle:
SELECT
...
FROM games_player
LEFT JOIN games
ON games.player_id = games_player.id
gruppierst die Datensätze nach Person und zählst sie pro Person:
SELECT
...
,count(*) AS treffer
FROM games_player
LEFT JOIN games
ON games.player_id = games_player.id
GROUP BY games_player.id
ORDER BY treffer DESC
Linuchs
Tach!
SELECT count(*) AS anzahl FROM games_player WHERE id_player='$abfrage_treffer_von_erster_abfrage->id'
Ein SELECT count() dürfte ohne GROUP BY einen Fehler verursachen.
Nein, macht es nicht.
gruppierst die Datensätze nach Person und zählst sie pro Person:
SELECT
...
,count(*) AS treffer
FROM games_player
LEFT JOIN games
ON games.player_id = games_player.id
GROUP BY games_player.id
ORDER BY treffer DESC
Und dann fangen die Probleme an. Unter MySQL ist es möglich, auch nach Feldern zu selektieren, die nicht in der GROUP-BY-Klausel angegeben sind. (Aggregatfunktionen wie SUM() oder COUNT() gehen allerdings immer.) Andere DBMSe betrachten das als Fehler. Es ist nämlich nicht eindeutig, aus welchem der vielen Datensätze je Gruppe der Wert genommen werden soll. Das Ergebnis kann durchaus wie gewünscht ausfallen, muss es aber nicht.
Wenn man lediglich einen einzelnen Wert (auch berechnet) aus einer anderen Tabelle braucht, macht sich eine (correlated) Subquery einfacher als ein Join. Und man ist mit der Felderliste der ersten Tabelle flexibler.
dedlfix.
Moin!
Und dann fangen die Probleme an. Unter MySQL ist es möglich, auch nach Feldern zu selektieren, die nicht in der GROUP-BY-Klausel angegeben sind. (Aggregatfunktionen wie SUM() oder COUNT() gehen allerdings immer.) Andere DBMSe betrachten das als Fehler. Es ist nämlich nicht eindeutig, aus welchem der vielen Datensätze je Gruppe der Wert genommen werden soll. Das Ergebnis kann durchaus wie gewünscht ausfallen, muss es aber nicht.
Mann. Das hatte ich glatt vergessen. Ich bewege mich wohl zuviel unter MS Produkten. Frueher hab ich auch immer lustig joins mit Aggregatfunktionen benutzt, bis ich dann auf Access und SQL Server gestossen bin. Das is immer ein Geraffel mit der Gruppierung, auch im Designmodus der jeweilgen MS Software, nur weil man ein Feld von 10 summiert haben will... Da bin ich irgendwann zu subqueries uebergegangen.
Danke fuer die Flashbacks...