グループごとに1つの行を返したい場合は、複数の並べ替え列で選択します。重複した質問を避けるために、greatest-n-per-groupの土地でここを軽く踏む。グループごとに複数の並べ替えを使用する
SCHEMA:
CREATE TABLE logs (
id INT NOT NULL,
ip_address INT NOT NULL,
status INT NOT NULL,
PRIMARY KEY id
);
DATA:
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);
CURRENT QUERY:
SELECT *
FROM logs
ORDER BY ip_address, status=1 DESC, id DESC
注:によってソーティングは、事実上状態列をブール値に変換します。 status=1
以降のタイブレーカーはid
です。このクエリは現在、最初にそれぞれip_address
の正しい行を返し、その後、私はそのために欲しくない他の行を返します。ip_address
CURRENT OUTPUT:
1, 19216800, 1
2, 19216801, 2
6, 19216803, 0
7, 19216804, 1
今日私の回避策はif ($lastIP == $row['ip_address']) continue;
とPHPでフィルタリングすることである:
1, 19216800, 1
3, 19216800, 2
2, 19216801, 2
6, 19216803, 0
4, 19216803, 0
7, 19216804, 1
5, 19216804, 0
はOUTPUT WANTED。しかし、私はこのロジックをMySQLに移行したいと考えています。
@Strawberry良いコールを、感謝を。私はクエリの現在の出力を追加し、出力を求めました。 –