2016-09-29 64 views
1

我有以下SQL查詢SQL獲取日期戳對於給定

SELECT 
    * 
FROM 
    tbl_clubs c 
    LEFT JOIN tbh_club_classes cc 
    ON c.clubID = cc.clubID 
    LEFT JOIN tbl_classes cl 
    ON cl.classID = cc.classID 

返回像這樣

Array 
(
[0] => Array 
    (
     [clubID] => 
     [clubName] => Club 1 
     [clubLocation] => Clyme Hall 
     [clubPostcode] => 
     [classID] => 2 
     [classType] => Kickboxing 
     [classStart] => 17:00 
     [classEnd] => 19:00 
     [classNight] => Monday 
     [classAudience] => Mixed 
     [classCost] => 5.00 
    ) 

[1] => Array 
    (
     [clubID] => 1 
     [clubName] => club 2 
     [clubLocation] => Sports Hall 
     [clubPostcode] => 
     [classID] => 3 
     [classType] => Karate/Judo 
     [classStart] => 19:30:00 
     [classEnd] => 21:00:00 
     [classNight] => Friday 
     [classAudience] => Mixed 
     [classCost] => 5.00 
    ) 
) 

我想classNight返回平日數據的下一次出現,一天中的月份,以及在classNight中存儲的下一次發生的月份,以便從我的查詢中得到類似這樣的內容。

Array 
(
[0] => Array 
    (
     [clubID] => 
     [clubName] => Club 1 
     [clubLocation] => Clyme Hall 
     [clubPostcode] => 
     [classID] => 2 
     [classType] => Kickboxing 
     [classStart] => 17:00 
     [classEnd] => 19:00 
     [classNight] => **Mon 26th Oct** 
     [classAudience] => Mixed 
     [classCost] => 5.00 
    ) 

[1] => Array 
    (
     [clubID] => 1 
     [clubName] => club 2 
     [clubLocation] => Sports Hall 
     [clubPostcode] => 
     [classID] => 3 
     [classType] => Karate/Judo 
     [classStart] => 19:30:00 
     [classEnd] => 21:00:00 
     [classNight] => **Fri 21st Oct** 
     [classAudience] => Mixed 
     [classCost] => 5.00 
    ) 
) 

我想修改我的查詢以獲得上面所需的結果。所以發生了什麼是classNight字段,它是一個varcar格式,它保存了一週中這個類的日子,我希望它返回一週中的某一天,這一天中的月份以及第二天的月份,它存儲在classNight中。

我已經使用PHP與此代碼

$day = $row['classNight'];//ie Monday, Tuesday etc 
$today = strtotime('today 00:00:00'); 
$date = strtotime($day."+1",$today); 
$date1 = date("D d M",$date); 

幹過,但我需要弄清楚如何在SQL查詢

任何幫助讚賞之內做到這一點

編輯

可能不是查詢返回星期幾和星期幾,它只是返回存儲在classNi中的下一個實例的日期戳GHT字段,然後我可以使用PHP的格式,我需要顯示它,給大家:)

我發現這個代碼,但不能讓它的工作

SELECT * (NEXT_DAY(SYSDATE,`classNight`) "NEXT DAY") AS dates 
FROM tbl_classes; 

不是會更容易肯定這會給我的時間戳,但應該給我的一天/一年/每年,任何人都可以看到什麼是錯誤的以上,以及如何我可以將其納入我的查詢

+0

當然可以。對不起,並不意味着諷刺,但你可以在PHP或MYSQL中做到這一點,但你應該包括一些額外的示例數據和所需的結果。因爲目前還不清楚你是否需要每週只處理一次,或每月一次,每週兩次,每週兩次,等等。等等等等。 – Matt

+0

嗨馬特,我已經更新了我的問題,希望能夠更容易理解。我只需要一週中的某一天,本月中的某一天以及下一天課程的月份數據。所以如果classNight字段是星期一,今天是9月29日星期四,我希望​​sql能夠獲得即將到來的星期一信息(星期一,十一月)。希望有幫助 – BBLJ84

+0

那麼在夏季/冬季停止期間會發生什麼?這些事情通常並不是每年都會發生。您可能最好使用類存儲實際日期(儘管不能將類放在同一個表中),並選擇與每個類最接近的未來日期。 – Kris

回答

0

什麼是日期列的數據類型D b?如果是在DATETIME或DATE中,則可以採取以下方法。使用PHP以表格存儲的相同格式獲取今天的日期。然後使用相同的查詢條件,如

SELECT 
    * 
FROM 
    tbl_clubs c 
    LEFT JOIN tbh_club_classes cc 
    ON c.clubID = cc.clubID 
    LEFT JOIN tbl_classes cl 
    ON cl.classID = cc.classID 
WHERE DATE(tablename.datecolumn) > $ date_variable 

這會給你從明天開始的課程。 記住一件事,在mysql中,我們只能比較日期,而不是時間。 我再次不知道您使用哪種格式來保存日期,因此它只會以相同的方式顯示它的存儲日期。但是在得到結果之後,我們可以使用php格式化它。

希望這有助於

+1

嗨JTheDev,謝謝你的回覆,我沒有在數據庫中的日期列,我只存儲了一週的課堂舉行,其中存儲在classNight字段。我希望查詢返回存儲在classNight字段中的一天中的下一個發生日的一週中的哪一天,哪一天中的哪一天以及哪一個月。我已經更新了我的問題,希望更好。 – BBLJ84

0

如果我理解正確的話,你要查找的下一個天一週中的某一天:「可以在此查詢本身內實現」

SELECT *, 
     (curdate + interval (case when field(dow, 'Sunday', . . . , 'Sunday') >= dayofweek(curdate) 
           then field(dow, 'Sunday', . . . , 'Sunday') - dayofweek(curdate) 
           else 7 + field(dow, 'Sunday', . . . , 'Sunday') - dayofweek(curdate) 
          end) day 
     ) as next_class_day 
FROM tbl_clubs c LEFT JOIN 
    tbh_club_classes cc 
    ON c.clubID = cc.clubID LEFT JOIN 
    tbl_classes cl 
    ON cl.classID = cc.classID; 
+0

嗨感謝您的回答,不幸的是我無法得到它的工作,因爲它一直說mysqli_num_rows()期望參數1爲mysqli_result,布爾給定。我已經更新了我的問題,希望能更好地解釋它。 – BBLJ84

+0

@ BBLJ84。 。 。間隔天數的關鍵字是「日」;我有'天'。 –

+0

我現在正在#1064 - 你的SQL語法有錯誤;檢查與您的MariaDB服務器版本相對應的手冊,以找到在'附近'使用的正確語法。 。 ,'Sunday')> = dayofweek(curate)then'day'at line 2 ???任何想法,謝謝 – BBLJ84