Mysql, выберите id' s сгруппированный отличной колонкой (выбирают все иды для каждой уникальной области),

Таким образом, у меня есть таблица 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 statment:

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 и ломаю их во множества. Я предпочел бы уже тянуть разбитые данные из базы данных. Это возможно?Thank you!

1
добавлено
Просмотры: 1
de
Парни спасибо. Я просто не был уверен, знал ли я лучшее решение. Я всегда чувствую, что должно быть что-то лучше, быстрее, более сильно так его польза, чтобы знать, что я выбрал правильно.
добавлено автор RachelD, источник
Я соглашаюсь. I' ve имел дело с этим тем же самым типом проблемы много раз прежде - с многократными уровнями вложенных массивов. Вы can' t возвращают вложенные массивы из баз данных SQL. Вашим решением перекручивания и строительства ответа в промежуточном программном обеспечении PHP является лучшее решение.
добавлено автор Elliot B., источник
Я чувствую то, что вы имеете, является, вероятно, лучшим, так как вы 1) поразите базу данных только однажды, и 2) будете в состоянии создать множество просто в одном проходе из-за заказа.
добавлено автор lc., источник

1 ответы

Вы могли использовать GROUP_CONCAT :

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

(Знайте group_concat_max_len.)

Но потому что нет никакого способа передать множество от MySQL до PHP, необходимо разделить получившую строку в PHP или JS, таким образом, я думаю, что существующий метод - лучший. Ваш метод безопасен и действительно просто острота в PHP, что-либо еще (включая GROUP_CONCAT) более сложно.

2
добавлено
Я никогда не использовал group_concat, который я должен буду играть вокруг с ним спасибо.
добавлено автор RachelD, источник
@lc. Я полностью соглашаюсь. GROUP_CONCAT был самой близкой вещью к какой OP, относительно которого попросили, учитывая, что вы can' t передают множество от MySQL до PHP.
добавлено автор AndreKR, источник
Поскольку вы говорите меня don' t думают, что это хорошо. Вы просите, чтобы база данных сделала тяжелую работу, создающую разграниченную запятой последовательность, только разделила его снова и имела, чтобы разобрать последовательности назад в целые числа.
добавлено автор lc., источник