gpt4 book ai didi

php - SQL查询多个where子句的优先级

转载 作者:太空宇宙 更新时间:2023-11-03 11:59:58 25 4
gpt4 key购买 nike

我有以下 SQL 查询

SELECT * FROM train_stop where code='ABC' OR code='XYZ' OR code='DEF' group by number order by departs

现在,因为我正在使用 Group By 以便只获取具有特定编号的一行。但我想优先考虑结果。这意味着如果我的表有 code='ABC' 和 code='XYZ' ,那么结果必须选择 ABC 行而不是 'XYZ' 因为 ABC 在 where 子句中排在第一位。类似地,如果表具有相同数字的 XYZDEF,则结果中必须出现 XYZ 而不是 DEF。到目前为止,我的实验让我知道它是随机的。如果您能指导我为这种情况实现这一目标和适当的索引策略,我会很有帮助。谢谢。

创建语句如下-

Create Statement is `CREATE TABLE `train_stop` (
`number` varchar(1000) NOT NULL,
`stop_number` int(11) NOT NULL,
`code` varchar(1000) NOT NULL,
`station name` varchar(1000) NOT NULL,
`arrives` time NOT NULL,
`departs` time NOT NULL,
`halt` varchar(1000) NOT NULL,
`pf` varchar(1000) NOT NULL,
`day` int(11) NOT NULL,
`km` varchar(1000) NOT NULL,
`speed` varchar(1000) NOT NULL,
`elev` varchar(1000) NOT NULL,
`zone` varchar(1000) NOT NULL,
`address` varchar(1000) NOT NULL,
`active` int(11) DEFAULT '1',
KEY `index_1` (`number`(767),`code`(767)),
KEY `PIndex` (`number`(767),`stop_number`),
KEY `three_columns_idx` (`code`(767),`active`,`departs`),
KEY `two_columns_idx` (`code`(767),`active`),
KEY `two_columns_group_idx` (`number`(767),`departs`),
KEY `one_columns_group_idx` (`departs`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1`

最佳答案

Group by 是执行此操作的错误方法。这样就可以了。每当您更改要检查的代码时,您都需要更改 order by 部分以匹配您的 where 子句顺序。

select * from (
select if(@prev = number, @rank := @rank + 1, @rank := 1 and @prev := number) rank,
train_stop.*
from train_stop, (select @prev := 0, @rank := 1) q
where code = 'abc'
or code = 'xyz'
or code = 'def'
order by number asc, code='abc' desc, code='xyz' desc, code='abc' desc
) q where rank = 1;

此处演示:http://sqlfiddle.com/#!9/ccc4d/7

此查询为每个有序组分配一个排名,然后仅从每个组中选择排名最高的值。如果站号为 0,可能会中断

关于php - SQL查询多个where子句的优先级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29934371/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com