Задавайте вопросы, мы ответим
Вы не зашли.
mysql> show columns from forums;
+--------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |------|
| name | varchar(32)| YES | | NULL | | |
| parent | int(11) | NO | | 0 | | |
| hint | varchar(32) | YES | | NULL | | |
+--------+-------------+------+-----+---------+----------------+ |
|
|
mysql> show columns from topics; |
+---------+-------------+------+-----+---------+----------------+ |
| Field | Type | Null | Key | Default | Extra | |
+---------+-------------+------+-----+---------+----------------+ |
| id | int(11) | NO | PRI | NULL | auto_increment | |
| name | varchar(32) | YES | | NULL | | |
| forumid | int(11) | YES | | NULL | |-----|
| hint | varchar(32) | YES | | NULL | |
| userid | int(11) | YES | | NULL | |
| views | int(11) | YES | | 0 | |
+---------+-------------+------+-----+---------+----------------+
Надо посчитать количество просмотров topics.views для форума, и учитывая просмотры всех тем подфорумов
Неактивен
Если подфорумы могут наследоваться бесконечно, то SQL для такой задачи не силен. Придется отдельно получать все id подфорумов (можно хранимой процедурой, но проще в PHP, загрузив весь массив форумов одним запросом SELECT ip,parent FROM forums и поместив его в хэш, у которого parent является ключом), а затем делать запрос на получение суммы.
Неактивен
Получается как-бы рекурсия? А запрос какой тогда?
Неактивен
Одним запросом невозможно. Проще всего внутри php с помощью цикла или рекурсии получить список всех id подфорумов.
Неактивен
Как вариант - сделать денормализацию таблиц. Т.е. ввести дополнительную табличку вида
CREATE TABLE relations (id INT, ancestor_id INT);
куда записывать предшественников (но не только родителей). Т.е. для иерархии вида
forums: id | parent ----------------------- 1 | NULL 2 | 1 3 | 2 4 | 1
нужно будет добавить следующие записи о предках
relations: id | ancestor_id ----------------------- 2 | 1 3 | 2 3 | 1 4 | 1
Тогда собрать всех "наследников" будет можно одним запросом.
Неактивен
большое спасибо
Неактивен