我需要从查询中选择一个不同的值,具体取决于WHERE子句的某个部分是否与结果匹配,或者不是。虽然我掌握了需要完成的逻辑,但我完全不知道如何以MySQL友好的方式来表示它!
请考虑以下伪代码:
SELECT table_name.*, `match_type`
FROM table_name
WHERE
(
IF THIS MATCHES:
'input' LIKE CONCAT('%', `value`, '%');
THEN
`match_type` equals 1
ELSEIF THIS MATCHES:
`value` LIKE CONCAT('%', 'input', '%')
`match_type` equals 0
)
如果第一个匹配项找到任何结果,那么我需要返回值为1的match_type
列。
否则,继续进行第二次测试。如果第二个匹配返回任何结果,那么我需要match_type
列而不是值为0.
如果两者都不匹配,则不应返回任何内容。因此,match_type
唯一可能的选项应为1或0。
我将如何完成此任务?
感谢您的帮助!
答案 0 :(得分:1)
使用CASE
:
SELECT table_name.*,
CASE WHEN 'input' LIKE CONCAT('%', `value`, '%') THEN 1
ELSE 0
END AS match_type
FROM table_name
WHERE 'input' LIKE CONCAT('%', `value`, '%')
OR `value` LIKE CONCAT('%', 'input', '%')
注意我已使用WHERE
将结果限制为其中一个条件为真的行,因此我不需要在CASE
中再次指定第二个条件。
答案 1 :(得分:1)
MySql将TRUE
评估为1
,因此您可以执行此操作
SELECT table_name.*, ('input' LIKE CONCAT('%', `value`, '%')) match_type
FROM table_name
WHERE 'input' LIKE CONCAT('%', `value`, '%')
OR `value` LIKE CONCAT('%', 'input', '%')
这是 SQLFiddle 演示