我有3张桌子:
Jobs | messages | Quotes
jobs
表包含有关已发布作业的所有信息。 job_id
为auto_increment
。
如果针对message
发布了一条消息,jobs job_id
s表中会包含一条消息。
Quotes
表包含针对jobs job_id
提交的任何引号。
我想:
select all from jobs where ...blah
select if exists from messages any message where messages table job_id = job table job_id
select if exists from quotes any quote where quotes job_id = job table job_id
这可能吗?我做了这个左连接查询,但它给出了重复的结果。
$sql = "SELECT DISTINCT jobs.job_id AS jobid,
jobs.worktitle AS wrktitle,
jobs.workinfo AS wrkinfo,
messages.message AS msg FROM jobs
LEFT JOIN messages ON
jobs.job_id = messages.job_id
LEFT JOIN quotes ON
jobs.job_id = quotes.workid";
请帮忙!谢谢史蒂夫
对不起,我的问题不是很好。我试图查询我的工作表,这是直截了当的。但是我通过作业ID列有2个与此表关联的其他表。消息和报价。消息表包含通过作业ID询问有关特定作业的任何问题 - 报价表包含通过作业ID针对特定作业提交的任何报价。我试图查询作业表并通过作业ID加入消息和引用表。但是这会给出jobs表的重复行。是否可以查询作业表,并显示任何消息或引号? - Stevie P答案 0 :(得分:0)
来自OP: “
工作ID --- 001
标题---替换窗口
详情--- blah blah
消息 - 消息1
报价 - £100
工作ID --- 001
标题---替换窗口
详情--- blah blah
消息 - 消息2
报价 - £90
工作ID --- 001
标题---替换窗口
详情--- blah blah
消息 - 消息3
报价 - £110
我在哪里
Job id --- 001
title --- replace window
Details --- blah blah
message -- message 1
message 2
message 3
quotes -- £100
£90
£110
“
鉴于引号和消息的数量可以增加,结果集的列数或行数也必须增加。 SQL通常返回重复的行,但有PIVOT函数可以添加列。请参阅此处:Dynamically create columns sql但换句话说,在一对多关系(一个Job到多个引号)中,每个记录将返回一行,其中作业相关< / em>报价。
但是,在SQL中没有什么可以做到的,以产生所需的结果,所以你必须在PHP或任何你的前端。我会做的是将第一个作业ID,标题,详细信息写入屏幕,然后循环结果集添加引号和消息,直到找到新的作业ID,然后重复。对不起,我没有PHP答案。