Задавайте вопросы, мы ответим
Вы не зашли.
При написании форума возникла проблема при выводе главной страницы.
Хочу сделать так, чтобы сформировать главную страницу одним запросом - без join.
Вот таблица для примера. Записи 3, 6, 9 это категории форума.
id position parent_id
1------3-------9
2------5-------3
3------2-------0
4------1-------6
5------2-------9
6------1-------0
7------4-------3
8------1-------9
9------3-------0
В итоге нужно отсортировать записи по позиции категорий, а потом по порядку в каждой категории. Чтобы было понятно приведу результирующую таблицу: (нули в табличке - потому что незнаю, что записать в это поле)
id position parent_id
6------1-------0
4------1-------6
3------2-------0
7------4-------3
2------5-------3
9------3-------0
8------1-------9
5------2-------9
1------2-------9
Можно ли решить эту задачу одним запросом либо может нужно как-то изменить структуру таблицы?
Заранее спасибо.
Отредактированно new_saler (08.01.2014 16:41:59)
Неактивен
new_saler написал:
В итоге нужно отсортировать записи по позиции категорий, а потом по порядку в каждой категории.
Расшифруйте эту фразу, непонятно, чего Вы хотите.
Вообще сортировку по двум параметрам можно сделать так:
select * from t order by field1, field2
Неактивен
ХШ подсказывает, что корневые категории (те у которых parent=0) выводятся в порядке position, но после каждой корневой идут её потомки тоже в порядке position.
Почему не хотите join? Может быть и можно это сделать без join одним запросом (путем жестких извращений через подзапросы и пользовательские переменные), но будет явно менее производительно.
Неактивен
vasya, да, вы всё правильно написали.
А как можно с join? Разбить данные на 2 таблицы?
Самые важные критерии для меня: максимальная простота и производительность.
(Так же немаловажно удобное добавление, перестановка местами корневых категорий и их потомков)
Неактивен
Посмотрите статью Как сделать иерархическое меню?
Неактивен
vasya написал:
Посмотрите статью Как сделать иерархическое меню?
Прочитал.
Сложноватая логика php получается...
Если честно, рассчитывал, что эту задачу можно выполнить проще.
Всё еще хочется найти легкое и изящное решение.
Вроде как должно получиться, если разбить форумы и категории на 2 таблицы и сделать запрос с джоином.
Отредактированно new_saler (09.01.2014 13:27:57)
Неактивен
new_saler написал:
Вроде как должно получиться, если разбить форумы и категории на 2 таблицы и сделать запрос с джоином.
Да
Неактивен
Сортировка будет ORDER BY position_f, position_k
где position_f поле из таблицы форумов; position_k - из таблицы категорий
Неактивен
Попробовал разбить данные на 2 таблицы: categories и forums
CREATE TABLE categories(
id int(10) UNSIGNED AUTO_INCREMENT,
cat_name varchar(80),
disp_position int(10))
ENGINE MyISAM DEFAULT charset=UTF8
CREATE TABLE forums(
id int(10) UNSIGNED AUTO_INCREMENT,
forum_name varchar(80),
disp_position int(10))
ENGINE MyISAM DEFAULT charset=UTF8
применив такой запрос:
Отредактированно new_saler (09.01.2014 15:05:22)
Неактивен