mysql - 当我的所有搜索条件都可以为空时,如何在 MySQL 中找到最新的匹配记录?

标签 mysql

我有一个表,其中包含可空字段,用作搜索条件,以及用于排序的 creation_date

我正在尝试编写一个查询来根据这些搜索条件查找最新记录,但如果其中一个缺失,我仍然希望匹配它。

所以我尝试做 fieldname = ?或每个字段为 null 并使用 order bycreation_date limit 1,但如果我这样做,那么如果有一行所有字段都为 null,它会返回该记录,而不是旧记录,其中它们不全部为 null

如何使其更喜欢具有更多匹配字段的结果,但不要求每个字段都存在?

最佳答案

请尝试以下操作:

SELECT
   {field list}
FROM
   {your table}
WHERE
   IFNULL(field1, @par1) = @par1
   AND IFNULL(field2, @par2) = @par2
   .....
ORDER BY
   creation_date DESC 
limit 1

在上述情况下,如果特定记录的 field1 具有 NULL 值,IFNULL 函数将返回给定的第二个参数,因此在这种情况下真正的比较将是@par1 = @par1 始终为真。因此,如果字段为 NULL,该部分不会影响搜索结果。

我希望它能有所帮助。

关于mysql - 当我的所有搜索条件都可以为空时,如何在 MySQL 中找到最新的匹配记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28203410/

相关文章:

SQL:子查询帮助

mysql - MySQL 中的 VARCHAR 与 TEXT

mysql - 在 ruby​​ 中运行 rake import 任务时内存不足

mysql - 用于识别重复项的 SQL 查询

php - 如何通过检查行是否存在来执行 Mysql Union?

mysql - BDD 测试 REST/JSON-RPC API

php - 如何从另外两个表创建派生表?

mysql - 如何比较sql数据库的日期和时间字段与当前日期,其中日期和时间是2019年6月6日11 :19AM this format in MYSQL

PHP 批量插入 foreach

phpmyadmin - 如何将 MySQL 4.dump 文件导入 MySQL 5?