Couin Couiiiinnn
Bon je savais pas trop quoi donner comme titre au sujet...
Gestion automatique de disques à la demande sur le site de la radio, chaque auditeur peut faire par exemple 4 demandes pour l'émission qui les diffusera.
Je voudrais faire en sorte que ce soit :
- Mélangé
- Equitable (que ce ne soient pas les demandent d'un même auditeur qui passent les unes à la suite des autres ou de manière rapprochée - En fait, que qu'une de chaque auditeur passe, avant de pouvoir passer la deuxième et ainsi de suite)
Pour ce faire, j'ai pondu cette requête :
Code : Tout sélectionner
SELECT DISTINCT(username) As demandeur,
(SELECT COUNT(*) FROM requests WHERE username = demandeur and played = 0) AS Nbunlayed,
(SELECT COUNT(*) FROM requests WHERE username = demandeur and played != 0) AS Nbplayed,
(SELECT songID FROM requests WHERE username = demandeur and played = 0 ORDER BY RAND() LIMIT 1) AS nextdiskal
FROM requests
ORDER BY Nbplayed ASC, RAND()
Dans notre exemple, tout le monde n'a pas fait le même nomber de demandes, certains auditeurs n'en ont fait qu'une.
J'obtiens un résutlat tel que :
demandeur Nbunlayed Nbplayed nextdiskal
Franky 0 1 NULL
Véro 1 1 1700
Couin 1 1 3109
Marcel 1 1 1270
Serge 0 1 NULL
Cedric 0 2 NULL
(Désolé je n'arrive pas à faire en sorte que ca présente sous forme de tableau, bien que dans l'éditeur les tabulations soient bien prises en compte

)
Sachant que l'idée c'est d'obtenir l'ID de la prochaine musique à jouer, il ne faut pas que les lignes où "nextdiskal" est NULL apparaissent.
Alors oui je peux faire un if nextdiskal != null et puis je break dès le premier ID valide rencontré mais comme je voudrais savoir comment on fait une requête permettant de ne pas afficher ces lignes là, je voudrait utiliser un LIMIT 1 à la fin de la requête.
Il faudrait donc que je puisse rajouter une clause WHERE nextdiskal IS NOT NULL, comme ceci :
Code : Tout sélectionner
SELECT DISTINCT(username) As demandeur,
(SELECT COUNT(*) FROM requests WHERE username = demandeur and played = 0) AS Nbunlayed,
(SELECT COUNT(*) FROM requests WHERE username = demandeur and played != 0) AS Nbplayed,
(SELECT songID FROM requests WHERE username = demandeur and played = 0 ORDER BY RAND() LIMIT 1) AS nextdiskal
FROM requests
WHERE nextdiskal IS NOT NULL
ORDER BY Nbplayed ASC, RAND()mais évidement, je me fais envoyer poueter avec un #1054 - Unknown column 'nextdiskal' in 'where clause' .
Y a-t-il une solution ?
Merkouin
