MySQLI SELECT有多个子句用于纪元时间戳选择

时间:2017-07-25 20:51:22

标签: mysql select

我有时间戳到“PART_EPOCH”列,表名是“crud_mysqli”

  • 我想为下一个FUTURE时间戳选择关联的“PART_ID”值。 (避免研究过去的时间戳)

以下MySQLI查询应该选择未来的MIN(下一个)值:>现在

但它不会返回任何东西。 如果我单独陈述条款,它确实返回预期的回报, 如下组合条款不会返回结果。

请你告诉我这里有什么问题:

    // Find next event PART_ID name :
    // SELECT lowest (next) PART_ID value in the future (do not select winthin past PART_EPOCH values)
    $query = "SELECT
    PART_ID
    FROM crud_mysqli
    WHERE (PART_EPOCH = (SELECT MIN(PART_EPOCH) FROM crud_mysqli))
    AND (PART_EPOCH > UNIX_TIMESTAMP(NOW()))
    ";

1 个答案:

答案 0 :(得分:1)

WHERE (PART_EPOCH = (SELECT MIN(PART_EPOCH) FROM crud_mysqli))

这里你要说的是只采用时间戳最低的条目,这可能是过去的事情。

AND (PART_EPOCH > UNIX_TIMESTAMP(NOW()))

在这里,你说,它应该在未来。如果您将来有任何带有时间戳的条目,则这两个条件相互排斥。

所以你需要将第二个条件放入子查询中:

SELECT
PART_ID
FROM crud_mysqli
WHERE PART_EPOCH = (
    SELECT MIN(PART_EPOCH) 
    FROM crud_mysqli
    WHERE PART_EPOCH > UNIX_TIMESTAMP(NOW())
)

这意味着:“获取过去时间戳最短的条目”

但是......你可以做到以下几点:

SELECT PART_ID
FROM crud_mysqli
WHERE PART_EPOCH > UNIX_TIMESTAMP(NOW())
ORDER BY PART_EPOCH ASC
LIMIT 1

如果您有两个具有相同时间戳的条目,则结果只会有所不同。在这种情况下,第一个查询将返回它们 - 第二个查询只返回一个。