[英]MySQL select based on precedence of a column's values
假设您有一个包含以下条目的表的动态视图
| id | type |
| 1 | cat |
| 2 | dog |
| 3 | bunny|
要注意的是,有时可能不存在带有"cat"
type
的id
,它可能看起来像
| id | type |
| 1 | dog |
| 2 | bunny|
人们将如何为该表编写查询以根据type
优先级选择单个行。
例如,如果type
的排名为cat > dog > bunny
,那么我希望该表中的第一个条目具有最高的排名条件。
如果我们将我们的view pets
称为ORDER BY id ASC
那么我们将得到一个查询,看起来像这样
SELECT *
FROM pets
WHERE type = 'cat' > 'dog' > 'bunny' -- here is where I need help
LIMIT 1
我已经尝试过类似的事情
IF EXISTS (SELECT *
FROM pets
WHERE type = "cat")
THEN SELECT * FROM pets WHERE condition = "cat" LIMIT 1
-- etc... down the ranking
似乎无法使它正常工作。 非常感谢您的帮助。
在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
。
当您在ORDER BY
创建订单号时,可以尝试使用CASE WHEN
order by
然后在LIMIT 1
完成客户order by
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
结果 :
| ID | type |
|----|------|
| 1 | cat |
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.