Подскажите Mysql запрос

12
D
На сайте с 20.09.2010
Offline
175
1155

Есть таблица с полями:

Id | Rub_id | Sub_id | Rub_name | Sub_name

1 | 1 | 1 | Транспорт | Легковые

2 | 1 | 2 | Транспорт | Грузовые

3 | 2 | 3 | Строительство | Бетон

4 | 2 | 4 | Строительство | Штукатурка

5 | 3 | 5 | Отдых | Отели

Каким вывести такой список по этой таблице:

Транспорт

- Лекговые

- Грузовые

Строительство

- Бетон

- Штукатурка

Отдых

- Отели

S
На сайте с 17.08.2008
Offline
114
#1

ORDER BY `Rub_id` ASC

это?

D
На сайте с 20.09.2010
Offline
175
#2
smbbws:
ORDER BY `Rub_id` ASC

это?

Я немного необ этом, а о том как не выводить главную рубрику, когда перед этим ее уже раз вывели.

Тоесть если было Транспорт | Легковые, то на 2й итерации цикла как не выводить Транспорт в следующей записи (Транспорт | Грузовые)

dma84
На сайте с 21.04.2009
Offline
168
#3
datum:
Есть таблица с полями:
Id | Rub_id | Sub_id | Rub_name | Sub_name

1 | 1 | 1 | Транспорт | Легковые
2 | 1 | 2 | Транспорт | Грузовые
3 | 2 | 3 | Строительство | Бетон
4 | 2 | 4 | Строительство | Штукатурка
5 | 3 | 5 | Отдых | Отели

Каким вывести такой список по этой таблице:

Транспорт
- Лекговые
- Грузовые
Строительство
- Бетон
- Штукатурка
Отдых
- Отели

Что-то структура фиг поймёшь какая, почему бы не использовать обычный список смежности и не городить огород:

Id | Rub_id - не одно и то же?

Rub_name | Sub_name - это зачем?

Для обычного списка смежности всё очень просто:


$res = mysql_query('SELECT `id`, `parent_id`, `name` FROM `sections` ORDER BY `pos`');

$tree = [['children' => []]];
$references = [&$tree[0]];
while($item = mysql_fetch_assoc($res))
{
if(isset($references[(int)$item['id']]))
$item['children'] = $references[(int)$item['id']]['children'];
$references[(int)$item['parent_id']]['children'][] = $item;
$references[(int)$item['id']] = &$references[(int)$item['parent_id']]['children'][count($references[(int)$item['parent_id']]['children']) - 1];
}
$references = null;

$sections_tree = $tree[0]['children'];

$tree = null;

На выходе ассоциативный массив в виде дерева разделов.

S
На сайте с 30.09.2016
Offline
469
#4

Формируйте двухмерный массив и разбирайте его через двойной цикл.

Отпилю лишнее, прикручу нужное, выправлю кривое. Вытравлю вредителей.
dma84
На сайте с 21.04.2009
Offline
168
#5
Sitealert:
Формируйте двухмерный массив и разбирайте его через двойной цикл.

А если вложенность больше? Рекурсия? Или не слышали о таком?

S
На сайте с 30.09.2016
Offline
469
#6
dma84:
А если

А если сервер на 386 процессоре? А если БД не на локалхосте и связь между серверами на древнем модеме? А если в таблице миллион строк? Есть конкретный вопрос и есть конкретный ответ.

---------- Добавлено 07.10.2016 в 01:31 ----------

dma84:
Или не слышали о таком?

Что за манера троллить на пустом месте...

S
На сайте с 23.05.2004
Offline
316
#7
Sitealert:
Что за манера троллить на пустом месте...

Зря вы так. Ваш оппонент привел полностью готовый код, как говорится "бери и пользуйся". В нем сразу предусмотрено несколько уровней. А формировать двухмерный массив все равно пришлось бы фактически идентичным кодом.

Это просто подпись.
S
На сайте с 30.09.2016
Offline
469
#8
Stek:
Зря вы так. Ваш оппонент привел полностью готовый код, как говорится "бери и пользуйся". В нем сразу предусмотрено несколько уровней. А формировать двухмерный массив все равно пришлось бы фактически идентичным кодом.

Да вовсе не зря. Сыпать якобы "умными" словами и намекать на некомпетентность собеседника - это моветон, за который надо советовать "убитьсяабстенку". И вбухать на форум содранный невесть откуда кусок кода, имеющий отдалённое отношение к вопросу топикстартера, не везде работающий, обременённый всякими лишними операциями и не содержащий того, чего надо - это вовсе не код "бери и пользуйся". Можете спросить об этом мнение ТС 🙄 .

К слову сказать, "оппонент" формирует не двухмерный а ТРЁХМЕРНЫЙ массив, с единственным элементом, являющимся двухмерным массивом, только для того, чтобы выдать этот двухмерный массив на выходе. Который, как я и написал, придётся разбирать циклом.

dma84
На сайте с 21.04.2009
Offline
168
#9
Sitealert:
Да вовсе не зря. Сыпать якобы "умными" словами и намекать на некомпетентность собеседника - это моветон, за который надо советовать "убитьсяабстенку". И вбухать на форум содранный невесть откуда кусок кода, имеющий отдалённое отношение к вопросу топикстартера, не везде работающий, обременённый всякими лишними операциями и не содержащий того, чего надо - это вовсе не код "бери и пользуйся". Можете спросить об этом мнение ТС 🙄 .
К слову сказать, "оппонент" формирует не двухмерный а ТРЁХМЕРНЫЙ массив, с единственным элементом, являющимся двухмерным массивом, только для того, чтобы выдать этот двухмерный массив на выходе. Который, как я и написал, придётся разбирать циклом.

К слову говоря, этот код строит дерево неограниченной вложенности из линейного списка без рекурсии. Код взят из собственной системы, а не стырен откуда-либо. Если вы плохо разбираетесь в деревьях в реляционных базах, то не стоит здесь "блистать" умом.

У ТС изначально структура шлаковая, на что был предложен хороший рабочий вариант, который не устроил пока только вас. Вы можете и дальше говнякать вволю.

Не думал, что выкладывая свой код, наткнусь на такое непонимание. Вот и помогай людям.

S
На сайте с 30.09.2016
Offline
469
#10
dma84:
Вы можете и дальше говнякать вволю.

Вот только не надо свой личный говнокод преподносить как конфетку. А думать надо было, когда начали меня троллить ни с того, ни с сего.

---------- Добавлено 07.10.2016 в 17:15 ----------

dma84:
У ТС изначально структура шлаковая, на что был предложен хороший рабочий вариант, который не устроил пока только вас.

Короче, всё, что не Ваше - шлаковое. Нормальная структура у ТС, это только Вам непонятно.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий