mysql - 比较子查询中的日期不返回结果

标签 mysql sql

我有一个 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

这可确保您的 nextprev 记录是最佳记录 - 不存在 betternextbetterprev.

关于mysql - 比较子查询中的日期不返回结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6768740/

相关文章:

php - 使用 Laravel 将 CSV 内容上传到数据库

sql - Postgresql 查询获取存储在单个表中的 n 级父子关系

sql - 从 sql 导出文件更新表中的多行

sql - 如何在MySQL中将一对一关系更改为一对多关系?

mysql - 如何使用 CakePHP 截断表?

PHP While 循环发布数据以编辑 1 行

sql - 我可以在创建 PostgreSQL 表后向其添加 UNIQUE 约束吗?

mysql - 如何在 MySQL 中创建此 View ?

php - MYSQL查询: Sort by input user based on numbers

mysql - 无法在 magento 模块中创建表