SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 02.08.2008 17:06:20

yagub
Участник
Зарегистрирован: 02.08.2008
Сообщений: 3

Помогите с запросом

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 для форума, и учитывая просмотры всех тем подфорумов

Неактивен

 

#2 02.08.2008 18:24:52

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Помогите с запросом

Если подфорумы могут наследоваться бесконечно, то SQL для такой задачи не силен. Придется отдельно получать все id подфорумов (можно хранимой процедурой, но проще в PHP, загрузив весь массив форумов одним запросом SELECT ip,parent FROM forums и поместив его в хэш, у которого parent является ключом), а затем делать запрос на получение суммы.

Неактивен

 

#3 03.08.2008 14:25:24

yagub
Участник
Зарегистрирован: 02.08.2008
Сообщений: 3

Re: Помогите с запросом

Получается как-бы рекурсия? А запрос какой тогда?

Неактивен

 

#4 03.08.2008 14:27:59

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Помогите с запросом

Одним запросом невозможно. Проще всего внутри php с помощью цикла или рекурсии получить список всех id подфорумов.

Неактивен

 

#5 03.08.2008 17:23:26

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Помогите с запросом

Как вариант - сделать денормализацию таблиц. Т.е. ввести дополнительную табличку вида
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

Тогда собрать всех "наследников" будет можно одним запросом.

Неактивен

 

#6 04.08.2008 17:15:24

yagub
Участник
Зарегистрирован: 02.08.2008
Сообщений: 3

Re: Помогите с запросом

большое спасибо

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson