提问者:小点点

如何为LIKE运算符传递变量以容纳值和空值


我有一些麻烦与过滤数据库信息在我的网站。 我有两个表,一个设备数据库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中的空值(因此%%返回所有值以及具有空值的值)。 谢谢!


共1个答案

匿名用户

尝试像下面这样更改您的查询。 使用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 ?, ?;

相关问题