我的问题可能有点令人困惑,这主要是我无法找到解决方案的原因。
所以,我有两个表,让我们称之为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
答案 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;