我有三个表,其中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当前保存了3个表。这样做的目的是向我显示其他两个id=4id=5,因为它们不在表reserv中并且没有任何状态。

希望现在更加清晰了。

最佳答案

您必须从表reserv指向要预订的表,我们称其为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)


*请注意,根据您的需要,根据我的需要使用“是”或“不是”,首先看起来您想要!=,后来您想要的是=

08-06 23:29