Mysql 根据位置进行不同的选择
我需要根据WHERE子句的某个部分是否匹配结果,从查询中选择不同的值。虽然我有需要完成的逻辑,但我完全不知道如何用MySQL友好的方式来表示它 考虑以下伪代码:Mysql 根据位置进行不同的选择,mysql,Mysql,我需要根据WHERE子句的某个部分是否匹配结果,从查询中选择不同的值。虽然我有需要完成的逻辑,但我完全不知道如何用MySQL友好的方式来表示它 考虑以下伪代码: SELECT table_name.*, `match_type` FROM table_name WHERE ( IF THIS MATCHES: 'input' LIKE CONCAT('%', `value`, '%'); THEN `match_type` equals 1 E
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\u type
列
否则,继续进行第二个测试。如果第二个匹配返回任何结果,那么我需要将match\u type
列的值改为0
如果两者都不匹配,则不应返回任何内容。因此,匹配类型的唯一可能选项应为1或0
我将如何着手实现这一点
谢谢你的帮助 使用
案例
:
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
将结果限制在其中一个条件为true的行中,因此我不需要在案例中再次指定第二个条件,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', '%')
这是一个优雅而合乎逻辑的演示。非常感谢。虽然这在大多数情况下更有用,但在这种特殊情况下,peterm的答案更好。非常感谢。