|
|
|
| Возник, возможно глупый, но нужный мне вопрос:
Имеется форум (неважно какой).
Надо чтобы в списке тем, у каждой темы было число, показывающее количество сообщений в данной теме. Конечно, это организовать не состовляет труда, но имеется 2 пути, по которым можно это организовать, и какой из них использовать?
1) Вот первый способ, но мне кажется, что это не разумно...
<?php
$res = mysql_query("SELECT * FROM tops where id='$tid' "); // tops - это таблица с темами, где id - это уникальный идентификатор, $tid - рабочая переменная.
while($res = mysql_fetch_array($res))
{
$count = mysql_query("SELECT count(*) FROM mess where top='$tid' "); // mess -таблица с сообщениями, где top - это идентификатор, который указывает принадлежность сообщения к темам. $tid - рабочая переменная.
$count = mysql_result($count, 0);
echo $res['top_name'].'[Сообщений: '.$count.']';
}
?>
|
2) Просто, при добавлении нового сообщения в БД, прибавлять число 1 к определённому числу в определённой ячейке темы. Эта ячейка хранит, так сказать, количество сообщений данной темы. | |
|
|
|
|
|
|
|
для: KIM
(07.02.2007 в 11:34)
| | Есть третий способ.
SELECT tops.*, count(top) AS mcnt
FROM tops LEFT JOIN mess ON tops.id=mess.tid
GROUP BY tops.id
|
| |
|
|
|
|
|
|
|
для: KIM
(07.02.2007 в 11:34)
| | Опять же все зависит от подхода и требований.
1 вариант - правильнее с точки зрения построения БД и работы с данными, но требует дополнительного запроса, по которому сервак должен пройтись по всей таблице, выбрать те, которые удовлетворяют условию и посчитать кол-во таких записей.... при большом форуме это может занять немало временных ресурсов
2 вариант - сложнее в плане организации - нужно поддерживать актуальность данных (+1 при новом сообщении, или переносе В тему... -1 при удалении, переносе ИЗ темы), но доп. времени нисколько не потребуется и вывод числа не зависит от объема таблицы.
Решать, как всегда, разработчику =) | |
|
|
|
|
|
|
|
для: KIM
(07.02.2007 в 11:34)
| | Лучше использовать второй вариант, форумы имеют объёмные базы и нагрузка будет достаточно сильной. | |
|
|
|