基于WHERE进行不同的选择

时间:2013-08-16 02:36:47

标签: mysql

我需要从查询中选择一个不同的值,具体取决于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。


我将如何完成此任务?

感谢您的帮助!

2 个答案:

答案 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 演示