Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 根据位置进行不同的选择_Mysql - Fatal编程技术网

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

我需要根据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\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的答案更好。非常感谢。