2016-12-03 66 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)));