Requete mysql compliquée

En fait, j’ai fait un robot pour chat irc.
Ce robot fait des stats de conversation, c’est à dire combien de lignes, mots et lettres a dit un utilisateur etc …
Il y a également un classement (top5 des personnes qui parlent le plus)
Jusque la, tout va bien, mais sur irc, les utilisateurs changent souvent de nom, du genre de manu a manu_aw, mais mon bot prend ces 2 noms pour 2 “personnes” différente.
Ce que j’aimerais, c’est que quand je tape “!stats manu” il me donne les stats de manu + stats de manu_aw.
Pour cela j’ai créer une table mysql avec 3 champs : id, user et referrer
si le nick est le nick de “base” de l’utilisateur, le referrer vaut 0, dans les autre cas il contient l’id du nick auquel il correspond.

Mon problème est d’éffectué en un minimum de requète le classement.
Jusque la j’avais cela : $s = “SELECT * FROM stats ORDER BY -line LIMIT 5”; (sans prendre en compte les différents nick)

pour complément, la table stats :

mysql> DESCRIBE stats;
±-------±------------±-----±----±--------±------+
| Field | Type | Null | Key | Default | Extra |
±-------±------------±-----±----±--------±------+
| user | varchar(30) | NO | PRI | | |
| line | int(10) | YES | | NULL | |
| word | int(20) | YES | | NULL | |
| letter | int(100) | YES | | NULL | |
±-------±------------±-----±----±--------±------+
4 rows in set (0.00 sec)

et nick :

mysql> DESCRIBE nick;
±---------±------------±-----±----±--------±---------------+
| Field | Type | Null | Key | Default | Extra |
±---------±------------±-----±----±--------±---------------+
| id | bigint(2) | NO | PRI | NULL | auto_increment |
| user | varchar(30) | NO | | | |
| referrer | bigint(2) | YES | | NULL | |
±---------±------------±-----±----±--------±---------------+
3 rows in set (0.00 sec
Edité le 30/08/2007 à 20:43

Pourquoi tu n’utilises pas le real name (qui ne change pas au changement de nick) plutôt que le nickname?

boah, tu pourrais faire une requete qui fait un connect by id = referrer where id=xyz, et ça te sélectionnera tous les enfants de l’id xyz.

ah zut, on parle de mysql [:shy]

C’est plutot une bonne idée. Mais bon sur le serveur ou je suis, le real name entré est souvent un fake et des trucs qui veulent rien dire du genre fkdsfjkdsjfksdj.
Puis y’en a aussi un paquet qui utilise des client tel que chatzilla pour lequel le realname est le meem …

Je suis pas très doué en mysql, mais est ce que un truc du genre ne marcherait pas ?

$s = “SELECT stats.line, ( SELECT SUM(line) FROM … ) AS stats.total FROM nick, stats ORDER BY -stats.line LIMIT=5”;

ou bien est ce qu’il faudrait que je change la structure des tables ?

lol merci quand meme benj :wink:
Edité le 26/08/2007 à 11:17

Je pense que la sous requête dans le SELECT passerait oui.

J’ai finalement réussi.

$s = “SELECT nick.referrer AS user, SUM(stats.line) AS line FROM stats LEFT JOIN nick ON stats.user=nick.user GROUP BY nick.referrer ORDER BY -SUM(stats.line) LIMIT 5”;