MySQL IF / WHEN / ELSE / OR

时间:2015-11-21 01:19:48

标签: mysql database mysqli

在MySQL中,我试图从数据库中检索单行,除非它不存在,在这种情况下我希望它检索第二行。我已经写出了代码,但出于某种原因它会检索这两行。如果未找到第一行,则检索第二行。所以无论它总是检索第二行。

SELECT *
FROM `members`
WHERE
`id` = 49
or `id` = 0

我在不同列的不同数据库上尝试了很多变体(当/ / /等等)时,它总是检索两行。

如何只检索我需要的一行?而且,任何人都可以向我解释为什么会这样做?谢谢。

3 个答案:

答案 0 :(得分:2)

您首先想要的是哪一行? id = 49? 您可以尝试使用mysql的ORDER BYLIMIT相结合来获得所需的结果。例如,如果你想先得到id 49,你可以这样做:

SELECT * FROM members WHERE id = 49 OR id = 0 ORDER BY FIELD(id, 49, 0) LIMIT 1

这将按字段id排序结果,但将结果限制为仅一行。因此,如果id = 49没有行,那么它仍会获得列表中的第一行id = 0

答案 1 :(得分:0)

另一种方法是使用union all和一些逻辑进行验证:

SELECT m.*
FROM members m
WHERE id = 49
UNION ALL
SELECT m.*
FORM members m
WHERE id = 0 AND NOT EXISTS (SELECT 1 FROM member m2 WHERE m2.id = 49);

在某些情况下,这可能会略微加快。

答案 2 :(得分:0)

您可以通过声明订购:

ORDER BY (id = 49) DESC

DESC因为(id = 49)对于您想要的行而言是1

如果您只想要1,LIMIT 1。如果您想要更多,可以将它们链接到自定义排序:

ORDER BY (id = 14) DESC, (id = 43) DESC, (id = 49) DESC LIMIT 3

很容易记住。