合并多行中的一列

时间:2015-01-23 14:54:25

标签: php mysql sql

我的问题可能有点令人困惑,这主要是我无法找到解决方案的原因。

所以,我有两个表,让我们称之为Main和Details。插入数据时,Main中有一个条目,详细信息可能有多个条目。

例如:

Main
id: 1
num: 55b
job: 100

-

Details:
id: 1,2,3
cost: 100, 50, 100
num: 55b, 55b, 55b
date: 01/01/14, ...

现在,我试图提取这些数据并以一种方式呈现它,它将显示所有日期相同的数字" num"在同一行。也许是因为我已经看了几天,但我无法弄清楚如何做到这一点的逻辑...

我的SQL现在:

$sql = "SELECT d.id, d.num, d.date, m.num, m.job
        FROM details d
        INNER JOIN main m ON m.num = d.num";

不确定我是否以最容易理解的方式提出这个问题,所以如果您有任何疑问,请随时提出!任何建议赞赏。

由于

编辑:对于GROUP BY,我已经尝试了,它只给我一个约会,但我需要每个日期为#34; num"。

背景信息:这是针对"里程碑"键入app,其中Main表示任务,Details表示任务中的不同里程碑。它将以一种方式呈现,它将向用户显示每个里程碑,每个工作的截止日期。

现在,我的桌子看起来像这样:

JOB# | mStone1 | mStone2 | mStone3 | ...
---------------------------------------------
100  |         |         | 01/01/14|       |
---------------------------------------------
100  | 01/25/14|         |         |

所以在这个例子中,我希望这两个日期在同一行,对于作业100

3 个答案:

答案 0 :(得分:2)

您可以group_concat使用

SELECT d.id, d.num, d.date, 
       group_concat(concat(m.num, ',', m.job) separator '|')
FROM details d
INNER JOIN main m ON m.num = d.num
GROUP BY d.id, d.num, d.date

答案 1 :(得分:1)

您正在寻找数据透视/交叉表查询

这应该有所帮助:mysql pivot/crosstab query

答案 2 :(得分:0)

这样的事情不足够吗?

SELECT *
FROM details
LEFT JOIN main ON details.main_id=main.id
WHERE details.main_id=1;