Ich versuche, ein kleines Voting-Tool zu schreiben. Ich habe 3 Tabellen: Benutzer, Standorte und Stimmen. votes hat 2 Fremdschlüssel (user_id und location_id).Mysql Beitritt und Verkettung verschiedener Tabellen
Benutzer (Beispieldaten):
+----+----------+
| id | username |
+----+----------+
| 5 | user1 |
| 7 | user2 |
| 11 | user3 |
| 4 | user4 |
| 12 | user5 |
+----+----------+
Orte:
+----+----------------+
| id | locationname |
+----+----------------+
| 1 | Pasta |
| 2 | Burger |
| 3 | Pizza |
| 4 | Chinese |
| 5 | Thai |
+----+----------------+
Stimmen:
+----+---------+-------------+------------+
| id | user_id | location_id | date |
+----+---------+-------------+------------+
| 30 | 5 | 1 | 2016-06-30 |
| 31 | 5 | 1 | 2016-07-01 |
| 32 | 7 | 1 | 2016-07-01 |
| 38 | 11 | 2 | 2016-07-01 |
| 39 | 4 | 1 | 2016-07-04 |
| 41 | 12 | 3 | 2016-07-04 |
| 44 | 5 | 4 | 2016-07-04 |
| 46 | 7 | 5 | 2016-07-04 |
+----+---------+-------------+------------+
Die Keypair Datum & Benutzer eindeutig ist so ein Benutzer stimmen kann nicht zweimal .
ich jetzt eine Liste, wie dies für CURDATE() haben wollen:
+----------------+----------------+----------------------+
| locationname | Votes | Voters |
+----------------+----------------+----------------------+
| Pasta | 3 | user1, user2, user x |
| Burger | 2 | user3, user4 |
| Pizza | 1 | user5 |
| Chinese | 1 | user6 |
| Thai | 0 | |
+----------------+----------------+----------------------+
Wie kann ich dieses Problem lösen? Versucht, etwas wie folgt aus:
SELECT locations.locationname AS location, count(*) AS count, GROUP_CONCAT(users.username SEPARATOR ', ') AS Voters
FROM votes
INNER JOIN locations ON votes.location_id=locations.id
WHERE date = CURDATE()
INNER JOIN users ON users.id=votes.user_id
WHERE location_id = "1" AND date = CURDATE()
GROUP BY location_id
ORDER BY count DESC;
Dank
Group_concat hat eine Längenbegrenzung, die standardmäßig auf 1024 Zeichen. Wenn Sie eine "große" Anzahl von Stimmen erhalten, wird es still die Liste der Wähler abschneiden. Und Joins sind falsch. sie haben keine 'where' Klauseln. Sie können nur eine Wo in einer Abfrage haben und sie wird nicht in die Joins übernommen. –
ok danke. Irgendeine Idee wie ich zu dem Ergebnis komme? – user3112086
Also ID ist redundant. Sayin ' – Strawberry