我有一个包含2列'id'和'name'的表格。 id是常规自动增量索引,name只是varchar。
id name
1 john
2 mary
3 pop
4 mary
5 john
6 michael
7 john
8 will
我想对此搜索结果进行排序
8 will
7 john
5 john
1 john
6 michael
4 mary
2 mary
3 pop
Id是DESC,但所有重复的名称都组合在一起。没关系如果ASC更容易实现。如有必要,我可以在PHP中反转结果。
常规ORDER BY名称,ID DESC首先对所有名称进行排序,然后对id进行排序。那不是我想要的。我对按字母顺序排列的名字不感兴趣。
我想要DESC顺序的id,如果有的话,用重复的名字分组。
P.S。我向它道歉这是一个重复的问题。
答案 0 :(得分:3)
如果我理解正确,你需要一个临时表格。
SELECT TableName.id, TableName.Name FROM TableName
INNER JOIN
(
SELECT Name, max(id) as maxid FROM TableName GROUP BY Name
) as tmp on tmp.Name = TableName.Name
ORDER BY maxid DESC, id DESC
答案 1 :(得分:0)
在mysql中有一个group by子句,请参阅select,然后在页面上搜索group by。
页面上有一些例子
所以试试这个......
SELECT id, name FROM TableName
group BY name;
由于您的ID充当您的主键,您可能不需要告诉它按升序排序,但您可以添加
order by id
如果你愿意的话。
当然group by子句也可以添加ASC和DESC子句,因此如果需要,您应该按字母顺序获取它们。
虽然,那说只是使用
order by desc(name)
可能会给你一个类似的结果,你需要在你的数据集上测试它。
请注意,这可能是一个非常昂贵的选择,因为它会尝试将所有内容排序到您所需的订单中。 因此,如果您希望将其用作其他选择的基础,则可以决定创建临时表,然后可以直接选择,否则每次使用主表时可能会重新进行分组。 一旦你的数据集变得相当大,这可能是你想要做的事情。 大卫