8791 sujets

Développement web côté serveur, CMS

Bonjour,

J'ai une table décomposée comme suit:

idFiche    idUtilisateur    question1    question2    question3
=====================================================================
    1               1             1           1           3
    2               2             2           2           1
    3               3             2           3           3


J'aimerais savoir s'il est possible via une requête SQL de compter par utilisateur (donc par ligne) le nombre de "1", "2" et "3" qui sont les réponses à des questions?

Vu la table ci-dessus, il faut que je sorte au final:
pour l'utilisateur 1 => il y a deux "1" et un "3"
pour l'utilisateur 2 => il y a un "1" et deux "2"
pour l'utilisateur 3 => il y a un "2" et deux "3"

Je n'arrive pas à trouver le fil pour la créer, cette #"?@ de requête... Smiley confused

Merci pour votre aide
Modifié par speedlab (29 Sep 2010 - 16:32)
Salut,

Personnellement je trouve que tu as déjà une erreur de conception. Tu devrais créer une table "question" avec un "idQuestion" et faire une table de jointures avec tes utilisateurs, ce qui donnerait un truc comme :

idFiche    idUtilisateur    idQuestion    reponse
==================================================
    1               1             1           1
    1               1             2           1
    1               1             3           1
    2               2             1           2
    2               2             2           2
    2               2             3           1
    3               3             1           2
    3               3             2           3
    3               3             3           3

Après la requête que tu veux est toute simple. Et si l'envie te prends de rajouter une question tu n'as pas à modifier la structure de la table.
Bonjour,
Je suis tout à fait d'accord pour la base mal conçue, mais je n'ai pas le choix: je dois faire avec Smiley rolleyes

Pour la requête dont il est question (trouver le nombre de "1", de "2" et de "3" pour une ligne), on m'a dit de la construire comme ci-dessous:
$sql =	"SELECT
LOCATE('1',question1) + LOCATE('1',question2) + LOCATE('1',question3) AS nombrede1,
LOCATE('2',question1) + LOCATE('2',question2) + LOCATE('2',question3) AS nombrede2,
LOCATE('3',question1) + LOCATE('3',question2) + LOCATE('3',question3) AS nombrede3,
FROM maTable";


A priori, ça ne fonctionne pas:
$res = mysql_query($sql);
$rows = mysql_num_rows($res) or die ('Die.');
me revoie Die. Smiley sweatdrop

Ne connaissant pas LOCATE, est-il possible de l'utiliser comme je l'ai écrit au-dessus?
Si oui, comment récupérer en php nombrede1, nombrede2 et nombrede3?
Si non, comment écrire la requête?
Modifié par speedlab (30 Sep 2010 - 20:23)