PHP/MySQL分组内排序

3

我有一个需求,需要按品牌分组并按其他列排序结果。

我从数组中获取品牌。

问题是,当我按品牌分组时,这个分组会按ID排序(在该分组内部)。

有没有一种方法可以在分组内部进行排序(order by)?

以下是我的数组和MySQL查询。

$laptop_brands = array("Acer", "Apple", "Dell", "HP-Compaq", "IBM-Lenovo", "Sony", "Toshiba", "ASUS", "Fujitsu", "Gateway");

$get_videos_query = "SELECT * FROM users_video WHERE location = 'location_1' AND brand IN ('" . implode("','", $laptop_brands) . '\') GROUP BY brand ORDER BY FIELD (brand, "Acer", "Apple", "Dell", "HP-Compaq", "IBM-Lenovo", "Sony", "Toshiba", "ASUS", "Fujitsu", "Gateway"), official DESC';

你是说你想先按官方排序,然后再按品牌排序吗? - Jonas T
不,我想按照这个数组的顺序排序,然后按品牌分组,最后按official列整体排序。Official列包含1或0。因此,我想按照这个数组排序,按品牌分组,然后首先显示所有在official列中有1的元素。明白吗? - dergotic
2
结果的排序是在聚合之后完成的,因此您指定的顺序不会影响 GROUP BY 的结果。从您的解释中我所理解的,您正在尝试通过排序修改 GROUP BY 将返回什么结果...但这是行不通的。 - Toote
好的,有没有其他方法来实现这个目标?有什么变通的办法吗? - dergotic
你的查询没有太多意义。如果你想“SELECT * ... GROUP BY brand”(暂时忽略 order by),那么你想要每个品牌只有一行随机数据,然后通过你的数组排序,最后再按 official 排序吗? - Justin Swanhart
好的,我明白查询语句有问题了 :) 我想要获取所有来自location_1的行,按品牌分组并按数组和官方排序。 - dergotic
2个回答

0

我已经找到了解决方案。 感谢大家的注释和想法。

所以这是我用来获得正确结果的查询:

$laptop_brands = array("Acer", "Apple", "Dell", "HP-Compaq", "IBM-Lenovo", "Sony", "Toshiba", "ASUS", "Fujitsu", "Gateway");


$query = "SELECT * FROM (SELECT * FROM users_video WHERE location = 'location_1' AND brand  IN ('" . implode("','", $laptop_brands) . '\') ORDER BY official DESC) as my_table_tmp GROUP BY brand ORDER BY FIELD (brand, "Acer", "Apple", "Dell", "HP-Compaq", "IBM-Lenovo", "Sony", "Toshiba", "ASUS", "Fujitsu", "Gateway")';

谢谢大家,特别是morteza kavakebi


0
SELECT * FROM (SELECT * FROM users_video WHERE location = 'location_1' AND brand IN ('" . implode("','", $laptop_brands) . '\') GROUP BY brand ) AS P ORDER BY FIELD (brand, "Acer", "Apple", "Dell", "HP-Compaq", "IBM-Lenovo", "Sony", "Toshiba", "ASUS", "Fujitsu", "Gateway"), official DESC

谢谢回复,但我得到了相同的结果 :( ">"符号是有意为之吗?我不得不删除它们才能使查询工作。 - dergotic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接