Mysql,选择按不同列分组的id(为每个唯一域选择所有ID)

时间:2012-12-28 01:43:50

标签: php mysql select

所以我有一个MySQL表:

Table Data:

id | domain     | title                | Full Url to Page | ... etc ...
1  | place.com  | Place Something      | http://place.com/1...
2  | place.com  | Place Something Else | http://place.com/2...
3  | place.com  | Some Other Place     | http://place.com/3...
4  | pets.com   | Cats Dogs Oh My      | http://pets.com/2....
5  | pets.com   | Bird Edition         | http://pets.com/3....

我需要(在PHP / JQuery中)是为每个唯一域获取一个id数组。所以我想要的上表的最终输出是:

$finalArray = array('place.com' => array(1, 2, 3), 'pets.com' => array(4, 5));

我目前的解决方案是获取按域排序的所有行,这是MySQL的声明:

SELECT `id`, `domain` FROM `gsort_linkdata` ORDER BY `domain`

返回:

1  | place.com
2  | place.com
3  | place.com
4  | pets.com
5  | pets.com

然后我循环遍历PHP中的行并将它们分解为数组。我更愿意从数据库中提取已经分解的数据。那可能吗?谢谢!

1 个答案:

答案 0 :(得分:2)

您可以使用GROUP_CONCAT

SELECT GROUP_CONCAT(`id`), `domain` FROM `gsort_linkdata` GROUP BY `domain`

(注意group_concat_max_len。)

但是因为没有办法将数组从MySQL传递给PHP,所以你需要在PHP或JS中拆分生成的字符串,所以我认为你当前的方法更好。你的方法很安全,实际上只是PHP中的一个单行程序,其他任何东西(包括GROUP_CONCAT)都比较复杂。