2014-09-10 55 views
0

我有3个表:
Jobs | messages | Quotes查询3个表没有重复

jobs表有大约发布的工作的所有信息。 job_idauto_increment。 如果对jobs job_id发布消息,message表中会包含一条消息。

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"; 

请帮忙!谢谢史蒂夫

好的抱歉我的问题不是很好。我试图查询我的工作表,这是直截了当的。不过,我有2个其他表通过作业ID列与此表关联。消息和报价。消息表包含通过作业ID询问关于特定作业的任何问题 - 引用表包含通过作业ID针对特定作业提交的任何引用。我试图查询作业表并通过作业ID加入消息和引用表。但是这会给作业表的重复行。是否有可能查询作业表,并显示任何消息或报价? - 杰拉德P

+0

所以你想要同时有消息和报价的工作? – Bulat 2014-09-10 21:31:44

+3

如果您可以发布样本数据和预期结果,它将有所帮助。考虑使用SqlFiddle.com并添加链接到模式与数据到您的问题。 – Bulat 2014-09-10 21:32:31

+0

是的,我想工作 - 显示结果,并与任何消息和任何报价一起显示具有相同的工作ID即时对不起我新和不知道如何做其他东西你问 – 2014-09-10 21:35:57

回答

0

从OP: “


作业ID --- 001

标题---更换窗口

详细---等等等等

消息 - 留言1

报价 - £100


作业ID --- 001

标题---更换窗口

详细---等等等等

消息 - 消息2

报价 - £ 90


Job id --- 001

标题---更换窗口

详细---等等等等

消息 - 消息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但换句话说,在一对多关系(一个工作对多引号)中,一行将返回每个记录,其中一个工作是相关到报价。

但是,在SQL中没有任何理由能够产生所需的结果,因此您必须在PHP或任何您的前端执行此操作。我会做的是将第一个作业ID,标题,细节写入屏幕,然后遍历结果集添加引号和消息,直到找到新的作业ID,然后重复。对不起,我没有PHP答案。