我有一些麻烦与过滤数据库信息在我的网站。 我有两个表,一个设备数据库equipment_database
和链接到特定设备的qr码qr_links
。 所以我使用了一个搜索函数,使用like
运算符过滤数据。 在选择所有条目的情况下,我将使用%%
,当搜索特定部分时,将使用%search_pattern%
。 问题是,并不是所有设备都有一个匹配的二维码。 因此,当使用like
运算符时,它不会返回具有空值的行,而只返回具有链接qr码的条目。 搜索qr码是可选的,所有有无qr码的条目都应返回。 下面是MySQL查询的一个示例:
SELECT equipment_database.equipment_id, equipment_database.equipment_type, equipment_database.equipment_name, qr_links.qr_linked_with_id, qr_links.qr_link_code
FROM equipment_database
LEFT JOIN qr_links
ON equipment_database.equipment_id=qr_links.qr_linked_with_id
WHERE equipment_database.equipment_institute_id=?
AND equipment_database.equipment_institute_branch_id=?
AND equipment_database.equipment_status=?
AND CONCAT (equipment_database.equipment_name, equipment_database.equipment_type, qr_links.qr_link_code)
LIKE ?
ORDER BY equipment_database.equipment_name
LIMIT ?, ?;
在使用like
运算符时,是否可以包含qr_links
中的空值(因此%%
返回所有值以及具有空值的值)。 谢谢!
尝试像下面这样更改您的查询。 使用MySQL IFNULL(列,“如果为NULL要返回的值”)函数,我们可以得到返回的空字符串,而不是NULL。
SELECT equipment_database.equipment_id, equipment_database.equipment_type, equipment_database.equipment_name, qr_links.qr_linked_with_id, qr_links.qr_link_code
FROM equipment_database
LEFT JOIN qr_links
ON equipment_database.equipment_id=qr_links.qr_linked_with_id
WHERE equipment_database.equipment_institute_id=?
AND equipment_database.equipment_institute_branch_id=?
AND equipment_database.equipment_status=?
AND CONCAT (equipment_database.equipment_name, equipment_database.equipment_type, IFNULL(qr_links.qr_link_code, ""))
LIKE ?
ORDER BY equipment_database.equipment_name
LIMIT ?, ?;