Как передать переменную для оператора LIKE для размещения значения и значений NULL - PullRequest
0 голосов
/ 21 июня 2020

У меня проблемы с фильтрацией информации из базы данных на моем веб-сайте. У меня есть две таблицы, база данных оборудования equipment_database и QR-коды, связанные со спецификацией c оборудования qr_links. Поэтому я использую функцию поиска для фильтрации данных с помощью оператора LIKE. В случаях, когда выбраны все записи, я бы использовал %%, а при указании c поиск частей будет %search_pattern%. Проблема в том, что не у всего оборудования есть соответствующий qr-код. Поэтому при использовании оператора LIKE он не возвращает строки со значениями NULL и возвращает только записи со связанным 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 ?, ?;

Можно ли каким-либо образом включить значения NULL из qr_links при использовании оператора LIKE (поэтому %% возвращает все значения плюс те, у которых значения NULL). Спасибо!

1 Ответ

1 голос
/ 21 июня 2020

попробуйте изменить свой запрос, как показано ниже. Используя функцию 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 ?, ?;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...