我在这里有一个查询,用于查找用户之间的消息:

SELECT *
FROM msgs
WHERE
    (recipientid = '{$_SESSION['rider_id']}' AND authorid = '{$riderid}')
    OR
    (authorid = '{$_SESSION['rider_id']}' AND recipientid = '{$riderid}')
ORDER BY datesent DESC

现在我有了一个AJAX调用,它将每隔30秒在实际页面上触发一次,以动态地发布新消息,我希望它获取任何已发布的消息,这些消息在发布后的30秒内。我不能让它工作。我试过这个:
SELECT *
FROM msgs
WHERE
     (recipientid = '{$_SESSION['rider_id']}' AND authorid = '{$authorrider['id']}')
     OR
     (authorid = '{$_SESSION['rider_id']}' AND recipientid = '{$authorrider['id']}')
     AND
     (datesent >= DATE_SUB(CURRENT_TIMESTAMP, INTERVAL 30 SECOND))

但它仍然返回所有消息。不是在过去30秒内。
我还需要设置一个状态为1一旦它被拉,所以如果有人在30秒内作出两个答复,它将不会被拉和。prepend()两次。
因此,一旦我可以得到我需要的记录,我就必须运行一个SET查询来设置状态。我的MySQL并不是真的需要改进才能实现这一点。
我刚想到的另一种方法是,每当检索到status时,就将其设置为1。然后我的AJAX查询就可以提取status=0的记录。

最佳答案

我认为你的问题是where子句缺少括号。试试这个:

SELECT *
FROM msgs
WHERE ((recipientid = '{$_SESSION['rider_id']}' AND authorid = '{$authorrider['id']}') OR
       (authorid = '{$_SESSION['rider_id']}' AND recipientid = '{$authorrider['id']}')
      ) AND
      (datesent >= DATE_SUB(CURRENT_TIMESTAMP, INTERVAL 30 SECOND));

关于php - 查询以仅返回发布后60秒内的记录,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24185632/

10-11 17:00