我有一个表格,其中包含我用作搜索条件的可空字段,以及用于排序的creation_date
。
我尝试编写查询以根据这些搜索条件查找最新记录,但如果其中一条记录缺失,我仍希望仍然匹配。
所以我尝试为每个字段执行fieldname = ? or null
并使用order by creation_date limit 1
,但如果我这样做,那么如果有一行所有字段都是null
,那么它会返回一个而不是旧的记录,而不是全部null
。
如何让它更喜欢具有更多匹配字段的结果,但不要求每个字段都存在?
答案 0 :(得分:0)
请尝试以下内容:
SELECT
{field list}
FROM
{your table}
WHERE
IFNULL(field1, @par1) = @par1
AND IFNULL(field2, @par2) = @par2
.....
ORDER BY
creation_date DESC
limit 1
在上述情况下,如果ie field1
具有特定记录的NULL值,IFNULL
函数将返回给定的第二个参数,因此在这种情况下的真实比较将是@par1 = @par1
这总是如此。因此,在NULL值字段的情况下,该部分不会影响搜索结果。
我希望它有所帮助。