MySQL:where(如果值存在,则为0 - 选择值;否则,选择0)

时间:2017-11-20 12:15:16

标签: php mysql sql subquery

在mysql的where子句中,"其中userID = SOME_VALUE;如果找不到SOME_VALUE - 选择0"。

如何?

我尝试了条件子选择,它有效,但相当复杂:

    "SELECT * FROM table_descriptors
    WHERE
    tTable = :table_obj_table 
    AND approvalTable = :approval_table 
    AND (
    CASE WHEN
        IFNULL(( FIND_IN_SET( :user_id2, 
        ( SELECT GROUP_CONCAT(userID) FROM table_descriptors
        WHERE tTable = :table_obj_table2
        AND approvalTable = :approval_table2
        ) ) ), 0) = 0
        THEN userId = '0'
        ELSE userId = :user_id
    END

    ) LIMIT 1";

subselect group_concats用户id,如果在set中找不到用户id,则选择userId = 0.否则,选择当前用户id。 IFNULL将NULL转换为0,以防万一。

它有效,但还有其他的吗?#34; easy"没有"硬"子选择?

1 个答案:

答案 0 :(得分:1)

如果我理解正确,当用户ID不存在时,您希望用户ID为0。如果是这样,您可以使用更简单的查询:

SELECT td.*
FROM table_descriptors td
WHERE td.tTable = :table_obj_table AND
      td.approvalTable = :approval_table AND
      td.userId  IN (0, :user_id)
ORDER BY (td.userId = 0) DESC
LIMIT 1;