[MySQL] Abfrage allgemein UND kombiniert in einer Query

chmee

verstaubtes inventar
Premium-User
Ich habe zwei Tabellen, die gewisse Besuchszeiten auf unserem Gameserver beinhalten. Vereinfacht sehen sie folgend aus:

1. Tabelle bf_server
Hier wird per Cronjob alle 600 Sekunden überprüft, ob die Spielerzahl höher als 0 ist, wenn Ja, wird ein Eintrag gemacht.
Code:
 id * usercount * ts        *  map
**********************************
..
31  *  2        * 1220      * MP001
32  *  6        * 1820      * MP001
33  *  17       * 2620      * MP001
34  *  28       * 3220      * MP001
35  *  31       * 3820      * MP001
36  *  4        * 12000     * MP003
37  *  7        * 12600     * MP003
..
2.Tabelle playerONserver
In die zweite Tabelle wird eingetragen, wenn ein oder mehrere Clanmitglieder auf dem Server sind.
Code:
 id * uid * timestamp * team * score
************************************
..
19  * 1   * 1220      * 1    * 0
20  * 1   * 1820      * 1    * 980
21  * 2   * 1820      * 1    * 90
22  * 1   * 2620      * 1    * 2180
23  * 2   * 2620      * 1    * 860
24  * 4   * 12000     * 2    * 230
25  * 4   * 12600     * 2    * 1400
..
Die Timestamps werden gleich sein, weil beide Abfragen quasi zeitgleich stattfinden und der timestamp von mir bei script-start gesetzt wird.

Nun die Frage : Wie stelle ich es in einer Query an, dass ich ALLE Einträge aus der ersten Tabelle bekomme inklusive der passenden Einträge aus Tabelle zwei, wenn User mit uid drauf war. Folgende Query wirft mir ja nur Einträge aus der ersten Tabelle aus, wenn User X mit uid drauf war.
Code:
SELECT *
FROM bf_playerONserver, bf_server
WHERE uid =1
AND bf_playerONserver.timestamp = bf_server.ts

Query-Result (mit WHERE uid=1) sollte so aussehen:
Code:
 id * usercount * timestamp *  map   * uid  *  team  * score
************************************************************
..
31  *  2        * 1220      * MP001  * 1    * 1      * 0
32  *  6        * 1820      * MP001  * 1    * 1      * 980
33  *  17       * 2620      * MP001  * 1    * 1      * 2180
34  *  28       * 3220      * MP001 
35  *  31       * 3820      * MP001
36  *  4        * 12000     * MP003
37  *  7        * 12600     * MP003
..
 
Hallo,

mittels LEFT JOIN kommst du zum gewünschten Ziel:
Code:
SELECT      *
FROM        bf_server AS s
LEFT JOIN   bf_playerONserver AS pos
            ON  pos.timestamp = s.ts
            AND pos.uid = 1

Grüße BN
 

Neue Beiträge

Zurück