|
|
|
| Меня интересует как делается посчет, например, постов в каждой из тем форума?
Я понимаю так - есть 2 таблицы:
Темы
id_tema name_tema
Посты
id_post id_tema text_post
Для меня единственный пока способ это быбрать из таблицы с темами нужные темы, а потом в цикле по ним пробежаться и через COUNT(*) подсчитать в каждой количество постов.
Но это получается, что количество запросов к базе будет довольно таки большим.
А если это не темы а меню в котором надо посчитать количество статей например..
Это же получается что накаждой странице прийдется делать весь набор запросов?
Может быть есть путь проще? | |
|
|
|
|
|
|
|
для: durable
(24.07.2009 в 16:05)
| | > Может быть есть путь проще?
Есть.
Грубо говоря, выбери из множества tema x post такое подмножество, у которого tema.id_tema = post.id_tema (имхо, лучше "soobsсhenie.id_thread"), это будут своеобразные классы эквивалентности по отношению "равны id_tema". Тогда в этих классах нужно подсчитать количество элементов и всё. гг | |
|
|
|
|
|
|
|
для: Жмурик
(24.07.2009 в 16:07)
| | Мысль понял попробовал даже получается таблица вида:
1
1
1
1
2
2
3
3
3
3
4
4
4
5
получается дальше на php надо ее обработать...
мысли такие создавать ассоциативный массив, key которого будут равен id темы и потом наращивать его по мере обработки полученно таблицы... при выводе пункта меню выводить соответствующий элемент массива с key = id темы
или есть другие мысли? | |
|
|
|
|
|
|
|
для: durable
(24.07.2009 в 21:04)
| | Блин, да вот тебе сухой код
SELECT t.*, COUNT( p.id_post ) AS cnt FROM threads t LEFT JOIN posts p ON t.id_tema = p.id_tema GROUP BY t.id_tema
|
Если хочешь, могу его мокрым сделать! | |
|
|
|
|
|
|
|
для: Жмурик
(24.07.2009 в 22:07)
| | Нет, мокрым не надо =)
Спасибо! | |
|
|
|
|
|
|
|
для: durable
(24.07.2009 в 16:05)
| | Можно продолжу в твоей теме?
У меня тоже подобное, но не могу собрать до кучи.
показать список имен тем определенного форума с подсчетом количества постов в темах ограничивая лимитом и сортируя по времени добавления последнего поста.
таблица тем
id - автоинкремент
id_forum - номер форума
name - название темы
max_time - время добавления последнего поста
таблица постов
id - автоинкркмент
id_themes - номер темы
Получается примерно так, но что-то не але
Плюс ко всему я понятия не имею куда вставить номер форума
Объясните пожалуйста, хочется одним запросом обойтись. | |
|
|
|
|
|
|
|
для: Рома
(25.07.2009 в 00:10)
| | Вот г-н Жмурик только что написал запрос.
Ограничиться конкретным форумом - еще один штрих WHERE t.id_forum = $forumID .
А добавить к нему сортировку и LIMIT, по-моему, не требует вообще никаких раздумий. | |
|
|
|
|
|
|
|
для: Trianon
(25.07.2009 в 00:58)
| | Да, вы правы - все получилось... только еще кое что не учел.
возле темы теперь стоит количество постов в ней, а еще хотелось бы видеть цифру новых постов с момента последнего посещения. Для этого нужно использовать еще одну переменную $time, и сравнивать ее с sfm_posts.reg_data. Через UNION чето ругается сильно, даже когда каждый запрос в своих скобках, а ORDER BY после обоих запросов. Реально ее в этот запрос запихнуть? Или здесь придется отдельным циклом проходить? Тогда может несоответствие иногда проскакивать, да?
$sql="SELECT sfm_themes.name, sfm_themes.time_reg_max_post,
COUNT(sfm_posts.pn) AS num FROM sfm_themes LEFT
JOIN sfm_posts ON sfm_themes.pn=sfm_posts.themes
WHERE sfm_themes.forums=".$f." GROUP BY sfm_themes.pn
ORDER BY sfm_themes.time_reg_max_post DESC LIMIT 5";
|
а, забыл, а стоит ли для главной страницы форума, такой как здесь, делать выборку одним запросом, или лучше циклом пробежаться? Как правильней? Топики я имею в виду. | |
|
|
|