2 votes

Ordonner les résultats d'une requête MySQL en fonction d'une valeur d'identification

J'ai un tableau de questions et un tableau de réponses. Je ne vais pas afficher tous les champs, mais la structure de base est la suivante

table des questions

+-----------------+----------------------+------+-----+---------+----------------+
| Field           | Type                 | Null | Key | Default | Extra          |
+-----------------+----------------------+------+-----+---------+----------------+
| id              | int(10) unsigned     | NO   | PRI | NULL    | auto_increment |
| name            | varchar(50)          | NO   | UNI | NULL    |                |
+-----------------+----------------------+------+-----+---------+----------------+

tableau des réponses

+---------------+------------------+------+-----+---------+----------------+
| Field         | Type             | Null | Key | Default | Extra          |
+---------------+------------------+------+-----+---------+----------------+
| id            | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| text          | mediumtext       | NO   |     | NULL    |                |
| question_id   | int(10) unsigned | NO   | MUL | NULL    |                |
+---------------+------------------+------+-----+---------+----------------+

Ce que j'essaie de faire, c'est d'obtenir toutes les réponses textuelles pour un ensemble particulier de questions, en un seul ensemble de résultats. Pour cela, je fais ce qui suit

$sql = "select text, GROUP_CONCAT(text SEPARATOR ',') AS text 
        FROM answers 
        WHERE question_id IN (11, 13, 14, 15, 22, 72);

Cela donne quelque chose comme ceci, qui semble correct

Array
(
    [0] => Array
        (
            [text] => data1,data2,data3,data4,data5,data6
        )
)

Cependant, ce que j'essaie de faire maintenant, c'est de classer cet ensemble de résultats dans un ordre particulier. Pour l'instant, j'ai ceci

$sql = "select text, GROUP_CONCAT(text SEPARATOR ',') AS text 
        FROM answers 
        WHERE question_id IN (11, 13, 14, 15, 22, 72) 
        ORDER BY FIELD(question_id, 13, 11, 72, 15, 22, 14);

Mais le résultat est toujours dans le même ordre que ci-dessus.

Comment puis-je obtenir les résultats dans l'ordre que je recherche ?

Merci

2voto

Madhur Bhaiya Points 128

Group_Concat() permet de spécifier un tri explicite des expressions/champs à agréger. Dans votre tentative de requête actuelle, les expressions externes ORDER BY La clause ne sert à rien, car GROUP_CONCAT() c'est effectivement les agréger tous en une seule ligne.

SELECT 
  GROUP_CONCAT(text 
               ORDER BY FIELD(question_id, 13, 11, 72, 15, 22, 14)
               SEPARATOR ',') AS text 
FROM answers 
WHERE question_id IN (11, 13, 14, 15, 22, 72)

1voto

Tudor Constantin Points 11393

Essayez avec une sous-requête :

$sql = "select text, GROUP_CONCAT(text SEPARATOR ',') AS text 
        FROM (SELECT text FROM answers WHERE question_id IN (11, 13, 14, 15, 22, 72) ORDER BY question_id) t;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X