从三个表中选择

时间:2014-12-10 10:02:40

标签: php mysql

我有三张表table_2table_1table_3

之间的中间位置(已连接)

table_id
...
...

table_rest

rest_id
table_id
...

其余

rest_id
...
...

选择我使用的查询

SELECT m.table_id, table_name
        FROM tables m 
        JOIN table_rest mr 
        ON m.table_id = mr.table_id 
        WHERE rest_id = '$rest_id'

我现在需要的是加入此查询另一个表reserv

id
...
status

要检查状态是01还是2,如果没有状态则不显示任何内容,这意味着没有任何记录可以显示给我。换句话说,这是一个保留的系统,我在屏幕上显示几个表。如果状态为0,1,2则表示采用该表。如果没有找到状态,则表示没有表记录,可以向用户显示。

编辑:示例方案

tables

table_id
   1
   2
   3
   4
   5

rest

rest_id
   1
   2

table_rest

table_id | rest_id
   1         2
   2         2
   3         2
   4         2
   5         2

因此,上面的查询将为5 tables for rest_id=2生成rest_id=1而不生成reserv 所以现在我有了另一张桌子

id | status 1 0 2 1 3 2

reserv

所以在这个表中id=4目前保存了3个表。我的想法是向我展示另外两个id=5reserv,因为它们不在表{{1}}中,并且没有任何状态。

希望现在有点清楚了。

2 个答案:

答案 0 :(得分:2)

如果您提供样本数据或sqlfiddle,情况会更好。根据我的意识:这是你想要的:

select tables.table_id, rest.rest_id
from tables
left join table_rest on table_rest.table_id = tables.table_id
left join rest on rest.rest_id = table_rest.rest_id
where rest.rest_id = '$rest_id'
and tables.table_id not in (select id from reserv)

答案 1 :(得分:2)

你必须从表格储备点指向哪个表格预订,让我们称之为reserv.table_id

SELECT m.table_id, table_name
        FROM tables m 
        JOIN table_rest mr 
        ON m.table_id = mr.table_id 
        left join reserv
        on reserv.table_id = m.id
        WHERE rest_id = '$rest_id'
        and reserv.status is null   (*note)

* note 使用'是'或者'不是'根据你的需要,据我所知,首先看来你想要的!=,之后你想要的是=