2016-11-20 28 views
1

我試圖執行SQL SELECT查詢以獲取城市內的所有商店,並且還有一個字段以通知商店是否在工作時間內。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 

我正在檢查該值的方式是一個布爾值,所以「打開」字段必須是0(關閉)或1(開)。

這是一種工作......但問題是,如果只有一家商店在工作時間內,所有其他商店也將「開放」,而不僅僅是特定的商店。

我還看到了一些人們使用CASE而不是另一個select的sql語句,因此只要最終結果是正確的,就可以使用任何其他類型的代碼。

回答

1

您正在重新定義tbStore a並失去了限制$url。你可能只需要改變:

SELECT 1 FROM tbStore a, workingHour b 

要:

SELECT 1 FROM workingHour b 
+0

我也不得不重命名錶的信。因爲城市表是'b',我沒有'workingHourb',而是'workingHourc'。但現在它正在工作!謝謝 – celsomtrindade

1

我剛纔重寫你的查詢使用顯式連接方式

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 
+0

這種工作方式..結果只包含商店,當他們是'開放',如果他們關閉,他們沒有出現在結果上。我需要的是獲得所有的商店,但根據工作時間將字段設置爲「0」或「1」。 – celsomtrindade

+0

@CelsomTrindade。 .. id_store案件有一個錯誤的別名..我有udapte的答案.. – scaisEdge