MySQL多列LIKE查询时如何识别匹配成功的对应列
解决方案
直接在原查询的SELECT子句中新增匹配标记字段即可,无需拆分多次查询,性能损耗极低,同时支持识别多字段同时命中的场景。
通用标准SQL实现
SELECT UPC, SKU, Product_Description, Product_ID, CASE WHEN UPC LIKE '%$q%' THEN 1 ELSE 0 END AS is_upc_matched, CASE WHEN SKU LIKE '%$q%' THEN 1 ELSE 0 END AS is_sku_matched, CASE WHEN Product_Description LIKE '%$q%' THEN 1 ELSE 0 END AS is_desc_matched FROM tblProducts WHERE UPC LIKE '%$q%' OR SKU LIKE '%$q%' OR Product_Description LIKE '%$q%'
返回结果中is_upc_matched、is_sku_matched、is_desc_matched三个字段为1即代表对应字段命中了搜索条件,0代表未命中。
简化写法(兼容MySQL等数据库)
如果使用支持IF函数的数据库,可以简化写法:
SELECT UPC, SKU, Product_Description, Product_ID, IF(UPC LIKE '%$q%',1,0) AS is_upc_matched, IF(SKU LIKE '%$q%',1,0) AS is_sku_matched, IF(Product_Description LIKE '%$q%',1,0) AS is_desc_matched FROM tblProducts WHERE UPC LIKE '%$q%' OR SKU LIKE '%$q%' OR Product_Description LIKE '%$q%'
直接返回命中字段名的写法
如果需要直接得到命中的字段名列表,不需要自行判断标记位,可以用字段拼接逻辑:
SELECT UPC, SKU, Product_Description, Product_ID, CONCAT_WS(',', IF(UPC LIKE '%$q%','UPC',NULL), IF(SKU LIKE '%$q%','SKU',NULL), IF(Product_Description LIKE '%$q%','Product_Description',NULL) ) AS matched_fields FROM tblProducts WHERE UPC LIKE '%$q%' OR SKU LIKE '%$q%' OR Product_Description LIKE '%$q%'
返回的matched_fields字段会直接列出所有命中的字段,多个命中字段用逗号分隔,例如同时命中UPC和SKU时返回UPC,SKU。
内容的提问来源于stack exchange,提问作者Flydwin
相关产品推荐
相关产品推荐

