Recupere max d'une requete

Eléphanteau du PHP | 24 Messages

15 avr. 2007, 12:33

Bonjour,
Tout skimplement (je débute) je n'arrive pas a récuperer le max de ce tableau retourner dans une premiere requete:

SELECT DISTINCT titre_id, count(mix_id)
FROM `mixs`
GROUP BY titre_id

en fait j'essai un truc du style

SELECT MAX(COUNT(mix_id), titre_id) IN (SELECT DISTINCT titre_id, count(mix_id)
FROM `mixs`
GROUP BY titre_id)

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

15 avr. 2007, 12:41

Le plus simple est d'utiliser ta première requête en la triant le count par ordre décroissant et ne récupérer que la première valeur retournée avec un LIMIT 0,1 par exemple.

Sinon avec une sous requête, il faut l'utiliser comme une table dans laquelle tu vas chercherles données qui t'interessent :

Code : Tout sélectionner

SELECT titre_id, MAX(nb) FROM ( SELECT titre_id, COUNT(mix_id) AS nb FROM mixs GROUP BY titre_id )
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 24 Messages

15 avr. 2007, 16:25

ok en ajoutant un order by desc avec un limit 0,1.
Par contre avec la sous requete où l'on considere que la premiere est une table, ça me renvoi :
#1248 - Every derived table must have its own alias
Donc je fais

Code : Tout sélectionner

SELECT titre_id, MAX(nb) FROM ( SELECT titre_id, COUNT(mix_id) AS nb FROM mixs GROUP BY titre_id ) AS truc
mais ça me renvoi
#1140 - Mélanger les colonnes GROUP (MIN(),MAX(),COUNT()...) avec des colonnes normales est interdit s'il n'y a pas de clause GROUP BY
donc en effet apres faire

Code : Tout sélectionner

SELECT MAX(nb) FROM ( SELECT titre_id, COUNT(mix_id) AS nb FROM mixs GROUP BY titre_id ) AS truc
Ca me ramène bien le max mais pas le titre_id bien sûr que je veux avec
...
En fait je voudrais que ça me ramène juste une occurence et non une liste

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

15 avr. 2007, 21:00

Au temps pour moi pour l'oubli, ceci dit :
#1140 - Mélanger les colonnes GROUP (MIN(),MAX(),COUNT()...) avec des colonnes normales est interdit s'il n'y a pas de clause GROUP BY
il te suffit de rajouter la clause et ca devrait fonctionner :)

Code : Tout sélectionner

SELECT titre_id, MAX(nb) FROM ( SELECT titre_id, COUNT(mix_id) AS nb FROM mixs GROUP BY titre_id ) AS truc GROUP BY titre_id
Mais je pense que la requête avec LIMIT sera plus optimisée.. a vérifier
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 24 Messages

16 avr. 2007, 17:33

Ben non,
ca me ramène une liste identique à la requête de base, en fait c'est pas mal ca me fait récupérer la liste ramené par la sous requête mais en compliquant la requête...
C'est as grave je vais utiliser le limit avec l'order by desc..
Mais je reste sur ma faim...