我尝试执行SQL SELECT查询以获取城市中的所有商店,并且还有一个字段来通知商店是否在工作时间内。
这是我到目前为止的SQL:
$day = date('w');
$hour = date('H:i:s');
SELECT a.id, a.rating, a.name, a.image, b.cityName
(
SELECT 1 FROM tbStore a, workingHour b
WHERE a.id = b.id_store
AND b.weekDay = '$day'
AND b.hourOpen <= '$hour'
AND b.hourClose >= '$hour')
) as 'open'
FROM tbStore a, tbCity b
WHERE b.url = '$url'
AND a.id_city = b.id
ORDER BY open
我检查此值的方式是一个布尔值,因此&#39;打开&#39;字段需要为0(关闭)或1(开放)。
它的工作方式......但问题是,如果只有一家商店在工作时间内,所有其他商店都会开放工作#39;而且,而不仅仅是那个特定的商店。
我还看到了一些sql语句,其中人们使用CASE而不是另一个select,因此只要最终结果是正确的,就可以使用任何其他类型的代码。
答案 0 :(得分:1)
您正在重新定义tbStore a
并失去$url
的限制。你可能只需要改变:
SELECT 1 FROM tbStore a, workingHour b
要:
SELECT 1 FROM workingHour b
答案 1 :(得分:1)
我刚刚使用explict join way重写了你的查询
SELECT
a.id
, a.rating
, a.name
, a.image
, b.cityName
, when( c.id_store is not null then 1 else 0 end) as open
FROM tbStore a
inner join tbCity b on a.id_city = b.id
LEFT join workingHour c on a.id = c.id_store
WHERE b.url = '$url'
AND c.weekDay = '$day'
AND c.hourOpen <= '$hour'
AND c.hourClose >= '$hour'
ORDER BY open