[SQL] Problème de requête

Résolu/Fermé
modjodandy Messages postés 5 Date d'inscription mercredi 26 mars 2008 Statut Membre Dernière intervention 26 mars 2008 - 26 mars 2008 à 16:49
modjodandy Messages postés 5 Date d'inscription mercredi 26 mars 2008 Statut Membre Dernière intervention 26 mars 2008 - 26 mars 2008 à 18:13
Bonjour,

J'ai une table qui se présente de cette façon :



nom de la table : wp_votes

ID             post                  votes
------------------------------------------------
1                10                 ,2,3,4,5
2                11                ,2,3,4,5,6,7


post correspondant à l'ID d'un message
votes correspondant à l'ID des utilisateurs qui ont votés pour le message

Or, le score des messages n'est pas sauvegardé dans la base de donnée, et j'aimerai trouver un moyen pour comptabiliser le nombres de virgules dans la colonne "votes" afin d'ordonner ma requête et d'avoir le résultat suivant :

ID su message : 11 Score : 6
Id du message : 10 Score : 4

Merci de votre aide! C'est assez urgent ;)

4 réponses

SebManfred Messages postés 484 Date d'inscription mardi 28 août 2007 Statut Membre Dernière intervention 20 mai 2011 128
26 mars 2008 à 17:09
c'est sous quel SGBD?
c'est pour utiliser dans un programme, derrière, ou juste pour faire de l'affichage (genre PHP/MySQL)?
si tu as un moteur PL/SQL, ça pourrait résoudre ton problème.
0
modjodandy Messages postés 5 Date d'inscription mercredi 26 mars 2008 Statut Membre Dernière intervention 26 mars 2008
26 mars 2008 à 17:11
C'est juste pour affichage php/mysql, j'avoue que je suis dessus depuis ce matin sans trouver de solution. Je suis une bille en requête sql (^-^)
merci à toi!
0
Utilisateur anonyme
26 mars 2008 à 17:20
Si ton champs votes est de type chaine de caractères tu peux faire :
SELECT LENGTH(votes)/2 FROM TA_TABLE
0
modjodandy Messages postés 5 Date d'inscription mercredi 26 mars 2008 Statut Membre Dernière intervention 26 mars 2008
26 mars 2008 à 17:33
yes ça fonctionne! Le seul problème c'est que j'ai des nombres décimaux et pas de nombres entiers :

Id du post : 18 Score : 2.0000

Une solution pour virer cette jolie brochette de zéros?

au pire j'ai utilisé la fonction ceil() dans mon code PHP mais si il existe l'équivalant sql, je prends!
0
Utilisateur anonyme
26 mars 2008 à 17:50
Tu peux utiliser la fonction CEILING (arrondi par excès), FLOOR (arrondi par défaut) avec MySQL :
SELECT CEILING(LENGTH(votes)/2) FROM TA_TABLE
0
modjodandy Messages postés 5 Date d'inscription mercredi 26 mars 2008 Statut Membre Dernière intervention 26 mars 2008
26 mars 2008 à 17:55
Merci beaucoup pour ton aide!!!
0
chantaussel Messages postés 137 Date d'inscription lundi 17 mars 2008 Statut Membre Dernière intervention 9 juillet 2014 30
26 mars 2008 à 17:55
Bonjour!

Je sais pas si ça va te servir (car tu es en passe de trouver une solution à ton problème), mais j'ai lu quelque part que dans une bdd c'était "pas le top" d'avoir plusieurs valeurs dans un même champ. (voir la discussion ici)
Je sais pas ce que ça vaut, mais il semblerait que ce soit mieux d'avoir une "table de liaison" du style:

id              post                       utilisateur ayant voté pour ce post
------------------------------------------------------------------------------------
1                10                                2
2                10                                3
3                11                                2

En fait tu es le dans le cas où tu as une "cardinalité n-n" car :
- chaque utilisateur peut voter pour plusieurs messages
- et chaque message peut être choisi par plusieurs utilisateurs
Et en cas de cardinalité n-n parait-il qu'une table de liaison fait bien l'affaire!

Du coup, après il te suffit de compter le nombre de fois où le message apparait dans la base pour avoir le score du message, et si un jour tu veux faire la liste des messages pour lesquels un même utilisateur à voté ce sera facile!

En espérant que ça soit utile
;)
0
modjodandy Messages postés 5 Date d'inscription mercredi 26 mars 2008 Statut Membre Dernière intervention 26 mars 2008
26 mars 2008 à 18:13
Merci pour cette précision, je vais creuser ça à la petite cuillère!
0