4

我需要根据 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
    )

如果第一个匹配找到任何结果,那么我需要返回match_type值为 1 的列。

否则,继续进行第二次测试。如果第二个匹配返回任何结果,那么我需要该match_type列的值改为 0。

如果两者都不匹配,则不应返回任何内容。因此,唯一可能的选项match_type应该是 1 或 0。


我将如何实现这一目标?

谢谢你的帮助!

4

2 回答 2

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.

于 2013-08-16T02:39:18.967 回答
1

MySql 评估TRUE1这样你就可以做到这一点

SELECT table_name.*, ('input' LIKE CONCAT('%', `value`, '%')) match_type
  FROM table_name
 WHERE 'input' LIKE CONCAT('%', `value`, '%')
    OR `value` LIKE CONCAT('%', 'input', '%')

这是SQLFiddle演示

于 2013-08-16T02:45:50.593 回答