gpt4 book ai didi

Mysql select with if else 和 order by 语句

转载 作者:行者123 更新时间:2023-11-29 10:38:34 25 4
gpt4 key购买 nike

在没有任何培训(并且聋哑人)的情况下,我开发了一个城镇门户系统,但我放弃了特定的选择语句。

SELECT `id` FROM `test` ORDER BY FIND_IN_SET(`townid`,'townA'), date DESC LIMIT 3 ;

CREATE TABLE `test` (
`id` int(5) NOT NULL AUTO_INCREMENT,
`townid` varchar(10) NOT NULL,
`data` text NOT NULL,
`date` date NOT NULL DEFAULT '2017-08-30'
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

INSERT INTO `test` (`id`, `townid`, `data`, `date`) VALUES
(1, 'townB', 'Data for Town B', '2017-08-29'),
(2, 'townA', 'Data for Town A', '2017-08-28'),
(3, 'townA', 'Data for Town A', '2017-08-27'),
(4, 'townA', 'Data for Town A', '2017-08-26'),
(5, 'townC', 'Data for Town C', '2017-08-25'),
(6, 'townB', 'Data for Town B', '2017-08-24');

ALTER TABLE `test`
ADD PRIMARY KEY (`id`);

ALTER TABLE `test`
MODIFY `id` int(5) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=7;COMMIT;

目标是

  • townA 选择 ID 2、3 和 4
  • townB 选择 ID 1、6 和 2
  • townC 选择 ID 5、1 和 2

换句话说,该城镇首先按日期顺序选择自己的文章,限制为 3,否则从任何其他城镇按日期顺序选择限制 3 或限制 3 的剩余部分。

选择 WHERE townid = 'townB' 或 WHERE townid IN ('townB') 都不能处理 3 限制问题,即使有,我也需要三个结果B 镇仅 2 条条目中的 1 条

最佳答案

您提供的样本和查询几乎是完美的。您唯一需要更改的是将 find-in-set 子句的 order 更改为 DESCENDING。

ORDER BY FIND_IN_SET(townid,'townA') DESC, date DESC

find_in_set() 将根据找到的内容 (1) 或未找到的内容 (0) 返回 1 或 0。所以你是按照那些先没有找到,然后才找到的来排序的。你想要相反。因此,即使您有 99 个项目,并且在几天内均匀分布在每个城镇 A、B 和 C,FIND_IN_SET 上的“DESC”结束顺序也会说先给我所有“townA”记录,然后之后还有其他人。然后,在每组 FOUND(或 NOT)记录中,按日期降序对它们进行排序。

您的查询实际上只差一个“DESC”子句。

关于Mysql select with if else 和 order by 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45960988/

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