|
|
|
| Есть три таблицы, которые хранят названии подфорумов, имя создаваемых тем и таблица, в которую записываются сообщения.
Как лучше реализовать подсчет количества сообщений в подфоруме.
1. Добавить в таблицу с подфорумами поле, которое будет увеличиваться при каждом добавлении сообщения.
2. Подсчитвать сколько тем в подфоруме, затем найти сообщения, у которых поле id_t равно id темы, которая находится в подфоруме.
Больше ниче придумать не могу.
Посоветуйте че-нить хорошее. :) | |
|
|
|
|
|
|
|
для: Unknown
(14.06.2007 в 22:27)
| | структуру связей бы посмотреть .... | |
|
|
|
|
|
|
|
для: Trianon
(15.06.2007 в 01:04)
| | Таблица forums, в которой содержатся названия подфорумов:
id // первичный ключ
name // имя подфорума
|
Таблица topics. Содержит названия тем и авторов.
id // первичный ключ
name // имя темы
user // имя автора
fid // определяет к какому подфоруму относиться тема
|
Таблица posts. Содержит сообщения.
id // первичный ключ
post // сообщение
name // имя автора
tid // определяет к какой теме относится пост.
|
| |
|
|
|
|
|
|
|
для: Unknown
(15.06.2007 в 02:22)
| |
SELECT forums.id, forums.name, tcnt.cnt
FROM forums LEFT JOIN
(SELECT COUNT(id) AS cnt, fid GROUP BY fid )
AS tcnt ON forums.id = tcnt.fid
ORDER BY forums.name
|
| |
|
|
|
|
|
|
|
для: Trianon
(15.06.2007 в 08:55)
| | Этот запрос считает количество сообщений в темах подфорума, либо только количество тем? | |
|
|
|
|
|
|
|
для: Unknown
(15.06.2007 в 12:18)
| | Тем.
А надо - сообщений?
Вместе с количеством собобщений будет так:
SELECT forums.id, forums.name, tcnt, pcnt
FROM forums LEFT JOIN
(SELECT COUNT(id) AS tcnt, fid
FROM topics GROUP BY fid )
AS tcnt ON forums.id = tcnt.fid
LEFT JOIN
(SELECT COUNT(id) AS pcnt, fid
FROM posts
JOIN topics ON posts.tid = topics.id
GROUP BY fid )
AS pcnt ON forums.id = pcnt.fid
ORDER BY forums.name
|
Но запрос может выйти и вправду тяжелым.....
Имеет смысл посмотреть на практике | |
|
|
|
|
|
|
|
для: Trianon
(15.06.2007 в 12:47)
| | Хотел сделать как здесь http://wen.ru/forum количество тем и количество сообщений. По ссылке тока количество сообщений. Количество тем я вывожу запросом
"SELECT COUNT(id) FROM `topics` WHERE fid=".$id;
|
Думаю лучше создать поле для количества сообщений и увеличивать/уменьшать значение при добавлении/удалении сообщений. | |
|
|
|
|
|
|
|
для: Unknown
(15.06.2007 в 13:38)
| | >Хотел сделать как здесь http://wen.ru/forum количество тем и количество сообщений. По ссылке тока количество сообщений. Количество тем я вывожу запросом
"SELECT COUNT(id) FROM `topics` WHERE fid=".$id;
|
Так придется запрос в цикле повторять для каждого форума.
А то что написал я - запрашивается один раз для всей страницы.
>Думаю лучше создать поле для количества сообщений и увеличивать/уменьшать значение при добавлении/удалении сообщений.
Полагаю, имеет смысл поставить опыт. | |
|
|
|
|
|
|
|
для: Trianon
(15.06.2007 в 13:44)
| |
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'GROUP BY fid )
AS tcnt ON forums.id = tcnt.fid
ORDER BY
|
Вот что выдает ваш запрос на количество тем. | |
|
|
|
|
|
|
|
для: Trianon
(15.06.2007 в 13:44)
| | Второй запрос на количество сообщений выдает
#1052 - Column 'id' in field list is ambiguous
|
| |
|
|
|
|
|
|
|
для: Unknown
(15.06.2007 в 15:03)
| | и что - не поправить?
SELECT forums.id, forums.name, tcnt, pcnt
FROM forums LEFT JOIN
(SELECT COUNT(id) AS tcnt, fid
FROM topics GROUP BY fid )
AS tcnt ON forums.id = tcnt.fid
LEFT JOIN
(SELECT COUNT(posts.id) AS pcnt, fid
FROM posts
JOIN topics ON posts.tid = topics.id
GROUP BY fid )
AS pcnt ON forums.id = pcnt.fid
ORDER BY forums.name
|
| |
|
|
|
|
|
|
|
для: Trianon
(15.06.2007 в 15:48)
| | Блин. Я что-то не пойму. А что если не один подфорум, а несколько?
Все равно для каждого подфорума считать будет? | |
|
|
|
|
|
|
|
для: Unknown
(15.06.2007 в 18:23)
| | Этот запрос считает для всех. | |
|
|
|
|
|
|
|
для: Trianon
(15.06.2007 в 18:29)
| | В смысле?
Он считает для каждого подфорума по отдельности или сколько ВСЕГО сообщений на форуме? | |
|
|
|
|
|
|
|
для: Unknown
(15.06.2007 в 18:47)
| | Для каждого по-отдельности, конечно.
Попробуйте исполнить запрос.
Сразу все поймете. | |
|
|
|
|
|
|
|
для: Trianon
(15.06.2007 в 19:08)
| | Как тогда на против каждого подфорума выводить количество сообщений?
Подфорумы выводится в цикле. | |
|
|
|
|
|
|
|
для: Unknown
(15.06.2007 в 19:16)
| |
<?
echo "<table><tr><td>forum</td>
<td>themes</td><td>posts</td></tr>\r\n";
$sql="SELECT forums.id, forums.name, tcnt, pcnt
FROM forums LEFT JOIN
(SELECT COUNT(id) AS tcnt, fid
FROM topics GROUP BY fid )
AS tcnt ON forums.id = tcnt.fid
LEFT JOIN
(SELECT COUNT(posts.id) AS pcnt, fid
FROM posts
JOIN topics ON posts.tid = topics.id
GROUP BY fid )
AS pcnt ON forums.id = pcnt.fid
ORDER BY forums.name ";
$res = mysql_query($sql) or die("Error in $sql: ". mysql_error());
while($row = mysql_fetch_assoc($res))
{
$id = intval($row['id']);
$name = htmlspecialchars($row['name']);
$themes= intval($row['tcnt']);
$posts= intval($row['pcnt']);
echo "<tr><td><a href=readforum?id=$id>$name</a></td>
<td>$themes</td><td>$posts</td></tr>\r\n";
}
echo "</table>\r\n";
|
| |
|
|
|
|
|
|
|
для: Trianon
(15.06.2007 в 19:27)
| | Блин. Чето я ступил.
Спасибо. | |
|
|
|
|
|
|
|
для: Unknown
(15.06.2007 в 13:38)
| | оличество тем я вывожу запросом
"SELECT COUNT(id) FROM `topics` WHERE fid=".$id;
А лучше COUNT(*).
А подсчет новых сообщений там реализован совсем не так. | |
|
|
|
|
|
|
|
для: Unkind
(15.06.2007 в 20:32)
| | что-то я не заметил ни полслова в теме про новые сообщения.
новые сообщения - это вообще очень больная тема.
Хотя и решаемая.
Но и запросы и код будет посложнее. | |
|
|
|
|
|
|
|
для: Trianon
(15.06.2007 в 20:35)
| | что-то я не заметил ни полслова в теме про новые сообщения.
Вероятно, смутило то, что автор хотел создать какое-то там поле, которое будет изменяться от добавления/удаления сообщений. К тому же почему-то показал на WEN-форум. | |
|
|
|
|
|
|
|
для: Unkind
(15.06.2007 в 20:41)
| | Показал на WEN-форум потому, что там есть то самое, о чем я говорю - количество сообщений на против каждого подфорума. :) | |
|
|
|
|
|
|
|
для: Unkind
(15.06.2007 в 20:41)
| | новые сообщения - это не функция от состояния форума.
Это функция от состояния форума и идентификатора посетителя.
А на этом WEN поди пойми, новые они или все. | |
|
|
|
|
|
|
|
для: Trianon
(15.06.2007 в 21:01)
| | На WEN-форуме зарегистрированные видят новые/всего. Но мне новые не нужны, надо было просто узнать общее количество сообщений в подфоруме. | |
|
|
|
|
|
|
|
для: Trianon
(15.06.2007 в 21:01)
| | Знаю | |
|
|
|