2016-12-03 60 views
0

我試圖根據他們在MYSQL中的訂閱開始日期獲取用戶信息。基於日期的三個表的Mysql查詢

這就是我想出了這麼遠..

SELECT a.id, a.user_login, a.user_email, c.cardtype, c.accountnumber, a.user_pass, a.user_registered 
    FROM users a 
    INNER JOIN memberships_users b 
    ON b.user_id = a.id 
    INNER JOIN memberships_order c 
    ON c.user_id = a.id 
    WHERE b.status = 'active' AND 
      (c.cyckle_period = 6 AND 
      ('2016-06-01 00:00:00' < (SELECT c.startdate ORDER BY c.startdate DESC LIMIT 1)) 
      OR 
      (c.cyckle_period = 1 AND 
      ('2015-12-01 00:00:00' < (SELECT c.startdate ORDER BY c.startdate DESC LIMIT 1)); 

這個查詢給我的錯誤信息「您的SQL語法錯誤;檢查對應於你的MySQL服務器版本的手冊在第8行'LIMIT 0,30'附近使用正確的語法。

+0

它在哪裏?沒有看到任何'LIMIT 0,30' – Rahul

+0

它不在查詢中。我認爲這是因爲phpmyadmin中的分頁。 – mattesj

+0

您發佈的代碼示例中沒有「限制0,30」。這個問題可能很簡單,因爲你的語法中缺少一個空格,但是沒有看到它,我們無法回答。 – Moob

回答

1

我在您的發佈代碼中看不到任何LIMIT 0, 30。你發佈了正確的代碼嗎?順便說一句,你這下面的部分是完全錯誤的

'2015-12-01 00:00:00' < (SELECT c.startdate ORDER BY c.startdate DESC LIMIT 1) 

它應該是

'2015-12-01 00:00:00' < SELECT max(startdate) FROM memberships_order 

更改WHERE部分像下面

WHERE b.status = 'active' AND 
     c.cyckle_period IN (6, 1) AND 
     '2015-12-01 00:00:00' < (SELECT max(startdate) FROM memberships_order); 
+0

就像我說的,限制0,30不在代碼中。 PhpMyAdmin在查詢後添加它。我嘗試了您的更改,但它對遊戲更改發生了錯誤。 – mattesj

+0

發佈錯誤消息 – Rahul

+0

#1064 - 您的SQL語法有錯誤;檢查與您的MySQL服務器版本相對應的手冊,以便在'SELECT max(startdate)FROM memberships_order'或'(c.cyckle_p')第7行 – mattesj

0

我認爲你只是缺少右括號。據我是應該的,

SELECT a.id,a.user_login,a.user_email,c.cardtype,c.accountnumber,a.user_pass,a.user_registered 來自用戶的一個 INNER JOIN memberships_users b ON b.user_id = a.id INNER JOIN memberships_orderç ON c.user_id = a.id WHERE b.status = '活性' AND (c.cyckle_period = 6和 ('2016年6月1日00:00 (c.cyckle_period = 1 AND ('2015-12-01 00:00:00'<(SELECT c.startdate))(' ORDER BY c.startdate DESC LIMIT 1)));