J'essaie de trouver un moyen de rassembler un ensemble de données sans avoir à boucler 700 000 requêtes mysql.
J'ai deux tableaux
users
avec
id autoincrement,
time timestamp,
username varchar(200),
email varchar(100),
ip varchar(20)
y uniq_ip
avec
ip unique varchar(20),
most_recent datetime,
count (int)
users
compte 25 millions de lignes et enregistre l'activité des utilisateurs lorsqu'ils travaillent sur le site. uniq_ip
contient une liste de tous les numéros d'IP et le nombre de fois qu'ils sont répertoriés dans les utilisateurs (lors de la mise à jour des déclencheurs).
En ce moment, en codant en rêve, j'obtiens une liste de toutes les IPs de uniq_ip
et les mettre en boucle pour obtenir les 2000 enregistrements les plus récents pour chacune de ces IP. Comme uniq_ip
a 700 000 lignes, cette boucle est vraiment méchante, faisant 700 000 requêtes au total, utilisant
select * from users where ip = '$outerloopip' order by `time` desc limit 2000;
J'essaie d'obtenir une requête unique qui récupère les 2000 derniers listings pour chacune des IPs. Si 1.2.3.4 est listé 10 000 fois, je veux juste les 2000 plus récents, basés sur le champ de temps.
Avez-vous une idée de la façon de le faire en une seule requête ?