J'ai un tableau d'historique de connexion des utilisateurs, montré ici:

+----------+-------------+------+-----+---------+----------------+
| Field    | Type        | Null | Key | Default | Extra          |
+----------+-------------+------+-----+---------+----------------+
| id       | int(11)     | NO   | PRI | NULL    | auto_increment |
| username | varchar(16) | NO   |     | NULL    |                |
| ip       | varchar(15) | NO   |     | NULL    |                |
| date     | datetime    | NO   |     | NULL    |                |
+----------+-------------+------+-----+---------+----------------+

J'essaie d'obtenir une requête qui peut sélectionner tous les utilisateurs qui partagent la même adresse IP le même jour.

Comme demandé dans le commentaire, j'attends ce résultat lorsque j'exécute cette requête

username        ip              date

// This 3 are linked (same ip, same day, distinct username)
Test1           10.10.20.20     28/12/2015 10:50:30
AnotherUser     10.10.20.20     27/12/2015 14:20:20
User3           10.10.20.20     28/12/2015 22:50:10

// This 2 are linked (same ip, same day, distinct username)
User159         30.10.20.20     28/12/2015 10:50:30
User156         30.10.20.20     28/12/2015 13:45:30

Merci d'avance pour toute aide que vous pouvez apporter.

1
Emax 28 déc. 2015 à 12:39

2 réponses

Meilleure réponse

Essaye ça:

SELECT ip, GROUP_CONCAT(DISTINCT username), DATE(`date`)
FROM myTable
GROUP BY ip, DATE(`date`)
HAVING COUNT(DISTINCT username) > 1

En passant:

Date est un mot clé dans MYSQL. Essayez donc de l'éviter comme nom de colonne.

3
Rahul Tripathi 28 déc. 2015 à 10:20

Utilisez de cette façon:

SELECT `ip`, GROUP_CONCAT(`username` SEPARATOR ' \t '), `date`
FROM Table
GROUP BY `date`, `ip`
0
Abdullah Al Shakib 28 déc. 2015 à 09:55