我有两个MySQL表:
投票表,带有ID和标题。。。

+----+------------------------------------------------------+
| ID | title                                                |
+----+------------------------------------------------------+
|  1 | ¿Con qué frecuencia accedes a Moodle?                |
|  2 | ¿Qué medio de transporte usas más frecuentemente?    |
+----+------------------------------------------------------+

还有一个民意调查数据表,有选项。。。
+----+--------+-------------------------+-------+
| ID | pollID | text                    | votes |
+----+--------+-------------------------+-------+
|  1 |      1 | No accedo               |    11 |
|  2 |      1 | Una vez al mes          |    10 |
|  3 |      1 | Una vez a la semana     |    23 |
|  4 |      1 | Una vez al día          |    20 |
|  5 |      1 | Más de una vez al día   |    19 |
|  6 |      2 | Coche particular        |    10 |
|  7 |      2 | Autobus                 |    20 |
|  8 |      2 | Tranvía                 |    50 |
|  9 |      2 | Bicicleta               |     5 |
| 10 |      2 | Taxi                    |     5 |
+----+--------+-------------------------+-------+

我想得到这个结果,在一列中只显示一条数据,在另一列中列出多行:
+----+------------------------------------------------------+-------------------------+-------+
| ID | title                                                | text                    | votes |
+----+------------------------------------------------------+-------------------------+-------+
|  1 | ¿Con qué frecuencia accedes a Moodle?                | No accedo               |    11 |
|    |                                                      | Una vez al mes          |    10 |
|    |                                                      | Una vez a la semana     |    23 |
|    |                                                      | Una vez al día          |    20 |
|    |                                                      | Más de una vez al día   |    19 |
|  2 | ¿Qué medio de transporte usas más frecuentemente?    | Coche particular        |    10 |
|    |                                                      | Autobus                 |    20 |
|    |                                                      | Tranvía                 |    50 |
|    |                                                      | Bicicleta               |     5 |
|    |                                                      | Taxi                    |     5 |
+----+------------------------------------------------------+-------------------------+-------+

执行此SQL命令:
SELECT polls.ID, polls.title, poll_data.text, poll_data.votes
FROM polls
INNER JOIN poll_data
ON polls.ID = poll_data.pollID;

我得到这个结果:
+----+------------------------------------------------------+-------------------------+-------+
| ID | title                                                | text                    | votes |
+----+------------------------------------------------------+-------------------------+-------+
|  1 | ¿Con qué frecuencia accedes a Moodle?                | No accedo               |    11 |
|  1 | ¿Con qué frecuencia accedes a Moodle?                | Una vez al mes          |    10 |
|  1 | ¿Con qué frecuencia accedes a Moodle?                | Una vez a la semana     |    23 |
|  1 | ¿Con qué frecuencia accedes a Moodle?                | Una vez al día          |    20 |
|  1 | ¿Con qué frecuencia accedes a Moodle?                | Más de una vez al día   |    19 |
|  2 | ¿Qué medio de transporte usas más frecuentemente?    | Coche particular        |    10 |
|  2 | ¿Qué medio de transporte usas más frecuentemente?    | Autobus                 |    20 |
|  2 | ¿Qué medio de transporte usas más frecuentemente?    | Tranvía                 |    50 |
|  2 | ¿Qué medio de transporte usas más frecuentemente?    | Bicicleta               |     5 |
|  2 | ¿Qué medio de transporte usas más frecuentemente?    | Taxi                    |     5 |
+----+------------------------------------------------------+-------------------------+-------+

最佳答案

正如每个人在评论中所说,这是一个展示你的数据的问题。但是如果你真的想在纯MySql上做这件事,就像我说的,这是可能的。这是你需要的(也许可以改进,但我现在太累了,想不出来)

SELECT IF(ord=(cnt-1),id,'') id,
       IF(ord=(cnt-1),title,'') title,
       text,
       votes
FROM
(
SELECT polls.ID,
       polls.title,
       poll_data.text,
       poll_data.votes,
       CASE WHEN COALESCE(@remain,0) = 0
            THEN @remain:=grouped.cnt-1
            ELSE @remain:=@remain-1
        END as ord,
       grouped.cnt
  FROM polls INNER JOIN poll_data
           ON (polls.ID = poll_data.pollID)
     INNER JOIN
          (select pollid,
                  count(*) cnt
             FROM poll_data
             GROUP BY pollid) grouped
        ON grouped.pollid = polls.ID
ORDER BY polls.id, ord desc) a

在小提琴上看到:http://sqlfiddle.com/#!2/1c7c3/18

关于mysql - 如何在一列中仅显示一条数据,另一列中列出多行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20913166/

10-10 09:15