我有一个表,其中包含可空字段,用作搜索条件,以及用于排序的 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/