SQL SELECT根据工作时间获取公司状态

时间:2016-11-20 18:57:31

标签: mysql sql

我尝试执行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,因此只要最终结果是正确的,就可以使用任何其他类型的代码。

2 个答案:

答案 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