问题描述
我正在尝试简化当前的查询代码。是否有一种将两个查询合并为一个更简单的方法?
这是到目前为止我尝试过的。虽然看起来确实很凌乱和笨拙。该查询请求所有客户端
SELECT * FROM clients ORDER BY name DESC
SELECT * FROM bookings WHERE client_id=$client_id AND done=0
完成表示作业是否完成,每个客户一次只能有1个未完成的作业。
说明:
该代码需要显示所有客户,并且如果该客户有一个预订,并且如果另一个数据库返回了一个结果,那么如果没有结果(即该客户以前的所有预订均为1),则不会显示预订按钮。出现一个书本按钮。
解决方法
如果您只想要一个标志,则可以使用EXISTS
:
SELECT c.*,(EXISTS (SELECT 1
FROM bookings b
WHERE ON c.client_id = b.client_id AND b.done = 0
)
) as has_booking
FROM clients c ;
,
我想你想要
select c.*,coalesce(b.done,1) completed
from clients c
left join bookings b on b.client_id = c.client_id and b.done = 0
这会尝试在booking
中为每个客户端找到未完成的行。如果客户端有未完成的行,则结果集中的列completed
包含0
,否则为1
。
SELECT clients.*,bookings.done
FROM clients
LEFT JOIN bookings ON bookings.client_id = clients.client_id
AND b.done = 0
有了以上结果,您可以在视图中添加条件
if(done == 0){
show button code
}