我有一个 MySQL 查询:
SELECT some_fields,
(SELECT slug
FROM photos
WHERE date_added > p.date_added
ORDER BY date_added ASC
) AS next,
(SELECT slug
FROM photos
WHERE date_added < p.date_added
ORDER BY date_added DESC
) AS prev
FROM photos p
WHERE slug = 'test'
从表中获取一些照片,并在同一查询中标记下一张和上一张图像。如果我删除查询的“上一个”部分,它将运行并返回结果,但是对于“上一个”部分,由于某种原因,不会重新返回结果。
奇怪的是,如果我将“上一个”部分中的 < 切换为 > ,它就会返回(显然不正确的)结果,因此比较这两个日期时间会出现问题。
说实话,我已经无计可施了,不知道会发生什么......
最佳答案
我更希望您JOIN
您的Photos
表本身,尤其是因为并非所有内容都有“下一张”照片,所以您实际上需要一个外部联接。这是一个不起作用的查询:
SELECT some_fields, next.slug, prev.slug
FROM photos current
LEFT JOIN photos next ON (current.date_added < next.date_added)
LEFT JOIN photos prev ON (current.date_added > prev.date_added)
WHERE current.slug = 'test'
它失败了,因为它返回所有三张照片,其中中间一张位于其他两张照片之间。为了让它们成为“下一张”和“上一张”,我们还可以尝试在当前和下一张、当前和上一张之间查找照片,并确保不存在这样的照片!
SELECT some_fields, next.slug, prev.slug
FROM photos current
LEFT JOIN photos next ON (current.date_added < next.date_added)
LEFT JOIN photos prev ON (current.date_added > prev.date_added)
LEFT JOIN photos betternext ON (current.date_added < betternext.date_added
AND betternext.date_added < next.date_added)
LEFT JOIN photos betterprev ON (current.date_added > betterprev.date_added
AND betterprev.date_added > prev.date_added)
WHERE current.slug = 'test'
AND betternext.slug IS NULL
AND betterprev.slug IS NULL
这可确保您的 next
和 prev
记录是最佳记录 - 不存在 betternext
和 betterprev
.
关于mysql - 比较子查询中的日期不返回结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6768740/