希望每组返回一行,其中一行由多个排序列选择。在每组最大 n的土地上小心行事,以避免重复的问题。
架构:
CREATE TABLE logs (
id INT NOT NULL,
ip_address INT NOT NULL,
status INT NOT NULL,
PRIMARY KEY id
);
数据:
INSERT INTO logs (id, ip_address, status)
VALUES ('1', 19216800, 1),
('2', 19216801, 2),
('3', 19216800, 2),
('4', 19216803, 0),
('5', 19216804, 0),
('6', 19216803, 0),
('7', 19216804, 1);
当前查询:
SELECT *
FROM logs
ORDER BY ip_address, status=1 DESC, id DESC
注意:排序status=1
有效地将状态列转换为布尔值。之后的决胜局status=1
是id
. 此查询当前首先为每个返回正确的行ip_address
,然后返回一堆我不想要的其他行ip_address
。
当前输出:
1, 19216800, 1
3, 19216800, 2
2, 19216801, 2
6, 19216803, 0
4, 19216803, 0
7, 19216804, 1
5, 19216804, 0
想要的输出:
1, 19216800, 1
2, 19216801, 2
6, 19216803, 0
7, 19216804, 1
今天我的解决方法是在 PHP 中使用if ($lastIP == $row['ip_address']) continue;
. 但我想将此逻辑移至 MySQL。