0

我有个问题。我的查询如下

"SELECT
mail
FROM
table2
INNER JOIN
table1 ON table2.wid = table1.id
WHERE
table1.time_stamp >= DATE_SUB(NOW(),INTERVAL 10 MINUTE)
AND
table1.status<>200
GROUP BY
table1.Id
ORDER BY
table1.time_stamp ASC
LIMIT 2"

我想你们中的大多数人都有我使用这个查询的目的。我一次只需要获取 2 个项目来发送电子邮件(但是当出现下面提到的问题时,查询不会向一个用户发送邮件)。

我的问题是当 3 行具有相同的 time_stamp 值时,它会从最后一个开始打印前两个,但它永远不会获取第三个。我不想错过电子邮件通知中的任何用户。我该如何解决这个问题?

4

2 回答 2

0

您在查询结果中提到LIMIT了 2。将其删除以获取所有结果或将其更改为 3。

我更改了SELECT添加更多列,以便在运行时轻松检查结果。

SELECT table1.Id, table1.time_stamp, mail
FROM table2 INNER JOIN table1 ON table2.wid = table1.id
WHERE
     table1.time_stamp >= DATE_SUB(NOW(),INTERVAL 10 MINUTE)
     AND table1.status<>200
GROUP BY table1.Id
ORDER BY table1.time_stamp ASC
LIMIT 3
于 2013-09-12T05:35:35.273 回答
0

听起来你想分批做这些。您可以使用它OFFSET来控制您在结果中的起点:

SELECT
mail
FROM
table2
INNER JOIN
table1 ON table2.wid = table1.id
WHERE
table1.time_stamp >= DATE_SUB(NOW(),INTERVAL 10 MINUTE)
AND
table1.status<>200
GROUP BY
table1.Id
ORDER BY
table1.time_stamp ASC
LIMIT 2
OFFSET 2

例如,这将检索第二组两行。如果您以编程方式设置偏移值,那么您可以使用它来遍历整个结果集,同时一次只检索两个。

我相信 MySQL 也可以LIMIT单独通过LIMIT <offset>, <limit>.

但是,如果我没有指出这样做是多么的低效和毫无意义,那我就是失职了。

于 2013-09-12T05:50:09.827 回答