Bal*_*ath 21 mysql sql-order-by
请忍受我的英语.
我有一张这样的桌子,
id | category_id | product_id
-----------------------------------
1 | 1 | 1
2 | 1 | 2
3 | 2 | 1
4 | 2 | 3
5 | 1 | 4
6 | 3 | 5
Run Code Online (Sandbox Code Playgroud)
我想要输出,
id | category_id | product_id
----------------------------------
1 | 1 | 1
3 | 2 | 1
6 | 3 | 5
2 | 1 | 2
4 | 2 | 3
5 | 1 | 4
Run Code Online (Sandbox Code Playgroud)
所以简而言之,我需要的是,category_id必须按顺序排列,以便像1, 2, 3, 1, 2, 3,......等循环重复.
bla*_*hop 19
这是一个查询,为您提供结果:
SELECT p1.*
FROM `product` p1
JOIN `product` p2
ON p2.category_id = p1.category_id
AND p2.id <= p1.id
GROUP BY p1.id
ORDER BY COUNT(*),category_id;
Run Code Online (Sandbox Code Playgroud)
product你的桌子在哪里
...尽量避免重复彼此接近
哦,那好吧.我能提出的最简单的解决方案是GROUP BY 'product_id' ORDER BY 'category_id'.这会使你的表看起来像这样:
id | category_id | product_id
----------------------------------
1 | 1 | 1
3 | 2 | 1
2 | 1 | 2
4 | 2 | 3
5 | 1 | 4
6 | 3 | 5
Run Code Online (Sandbox Code Playgroud)
我假设"category_id必须被排序,以便它在循环中重复"是"我不希望彼此重复"的翻译.
如果您在产品1和产品2上有三个类别,它们将组合在一起(1,1,1,2,2,2)但类别将按数字顺序排列(1,2,3,1,2,3) .它不是您想要的完美解决方案,但它是一个简单的解决方案,似乎您可以满足您的需求.
查询中任何复杂的hackery都只会降低查询速度.虽然它现在可能不是问题,但如果你有很多记录,这可能是一个大问题.
| 归档时间: |
|
| 查看次数: |
407 次 |
| 最近记录: |