假设您有一个包含以下条目的表的动态视图
| id | type |
| 1 | cat |
| 2 | dog |
| 3 | bunny|
遇到的问题是,有时id
的{{1}}可能不像type
,
"cat"
人们将如何为该表编写查询以根据| id | type |
| 1 | dog |
| 2 | bunny|
的优先级选择单个行。
例如,如果type
的排名为type
,我希望该表中的第一个条目具有最高的排名条件。
如果我们调用具有cat > dog > bunny
的视图pets
,那么我们将有一个看起来像这样的查询
ORDER BY id ASC
我尝试过类似的事情
SELECT *
FROM pets
WHERE type = 'cat' > 'dog' > 'bunny' -- here is where I need help
LIMIT 1
虽然似乎无法使它正常工作。非常感谢您的帮助。
答案 0 :(得分:3)
在MySQL中,我将使用field()
:
SELECT *
FROM pets
WHERE type IN ('cat', 'dog', 'bunny')
ORDER BY field(type, 'cat', 'dog', 'bunny')
LIMIT 1
如果您不想处理WHERE
子句,则可以执行以下操作:
SELECT *
FROM pets
ORDER BY field(type, 'bunny', 'dog', 'cat') DESC
LIMIT 1
您需要倒退,因为不匹配项返回为0
。
答案 1 :(得分:2)
您可以尝试使用CASE WHEN
在ORDER BY
中创建订单号,先让客户order by
然后LIMIT 1
CREATE TABLE pets(
ID INT,
type VARCHAR(50)
);
INSERT INTO pets VALUES ( 1 , 'cat');
INSERT INTO pets VALUES ( 2 , 'dog');
INSERT INTO pets VALUES ( 3 , 'bunny');
INSERT INTO pets VALUES ( 4 , 'TST');
查询1 :
SELECT *
FROM pets
ORDER BY CASE
WHEN type = 'cat' THEN 1
WHEN type = 'dog' THEN 2
WHEN type = 'bunny' THEN 3
ELSE 4
END
LIMIT 1
Results :
| ID | type |
|----|------|
| 1 | cat |