Структура форума дубль какой то...

Asar

Новичок
Структура форума дубль какой то...

Посмотрел схожие темы, которые здесь не раз уже затрагивались, но пока ответа найти не удалось. Потому спрошу сам:
Надо сделать форум.
В нем несколько больших разделов, в каждом юзвери создают свои темы, на них пишутся ответы и прочее...
Думаю сделать по 2 таблицы для каждого раздела:

1 таблица - Темы
Id темы, заголовок темы, Автор, дата создания

2 таблица - Сообщения
Id сообщения, Id темы, сообщение, дата создания сообщения, Автор

Т. о. зная ид сообщения можно довольно легко вывести для него все данные, а зная ид темы - все сообщения темы...

Вопрос - может, не хватает чего или можно сделать какой то более оптимизированный вариант структуры форума?..
 

neko

tеam neko
на самом деле первая таблица вообще ненужна
а так все нормально
 

Asar

Новичок
Почему не нужна? А как выводить список тем, да по дате отсортированных, к примеру?
 

neko

tеam neko
ненужна потому что ненужна
список тем надо выводить очевидно по первому сообщению в теме
т.к. она именно с первого сообщения и начинается

можно конечно сюда много че еще приплести, но ты кажется хотел оптимизированный вариант -- ну а вот и он!
 

Asar

Новичок
По первому сообщению - это можно. Но для названия то темы (куда уж без него то) что ли отдельное поле создавать в таблице?
 

neko

tеam neko
ну сделай, а что плохо?
просто и наглядно
ну или еще одну таблицу, если есть тяга к теоретизированию
 

Фанат

oncle terrible
Команда форума
если учесть, что пустое поле варчар места не занимает, то стремление сэкономить это поле не выглядит особо оптимальным
 

Asar

Новичок
Если было бы 2 таблицы - Id темы было бы авто_инкрементом - и с ним все понятно.
Т. к. таблицу делаю одну, то Id темы надо назначать как то иначе. Пока додумался до того, чтоб вычислить максимальное уже имеющееся значение этого поля и прибавить к нему тупо единицу.
Для этого пишу:

$MxQuery = mysql_query("SELECT MAX (Id_Theme) FROM forum");
$MxArr = mysql_fetch_assoc($MxQuery);
echo $MxArr['Id_Theme'];

Вопросы:
1. Разумный ли я вообще выбрал способ вычисления Id_Theme?
2. Насколько я понял, в моем коде имеется ошибка, потому как Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource... В упор не пойму, в чем она - раньше максимума вычислять не доводилось, а, судя по руководству - все верно...
 

Фанат

oncle terrible
Команда форума
1. Разумный ли я вообще выбрал способ вычисления Id_Theme?
нет, конечно.
тебе вообще не нужны специальные id темы.
и тем более - таким кривым способом, не имеющим ничего общего с правильной работой с базой.
Насколько я понял, в моем коде имеется ошибка, потому как Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource... В упор не пойму, в чем она
А от тебя и не требуется понимать. От тебя требуется ПРОЧЕСТЬ.
А для этого надо попросить базу скзкть тебе - в чем состоит ошибка.
скажи честно - ты этот текст читал - PHP FAQ: Ничего не работает! Что делать??? ?
 

Asar

Новичок
Если не нужно Id темы, но откуда то нужно брать для каждого сообщения название темы, то выходит, что нужно для каждого сообщения заполнить поле "название темы"... В таком случае неясно, откуда взялось упоминание пустых варчаров чуть выше... Или есть еще какие то способы?

Текст этот читал, даже не раз... Сейчас вот еще раз прочитал... При запуске mysql_error читаем следующее:
You have an error in your SQL syntax near '(Id_Theme) FROM forum' at line 1
В том то и дело, что я не вижу этой ошибки, потому как по справочнику код выходит, что верный, а без справочника я MAX'ом не пользовался ни разу...
 

Фанат

oncle terrible
Команда форума
откуда то нужно брать для каждого сообщения название темы
а зачем тебе для каждого сообщения название темы?
ты собираешься название темы писать перед каждым сообщением, а не в начале? а зачем?
Но если хочешь - то опять непонятна проблема. оно же у тебя УЖЕ есть - название темы. ты же его запрашивал, когда запрашивал все сообщения темы? оно у тебя есть в переменной - какая проблема выводить везде, где тебе надо?

потому как по справочнику код выходит
вот СКОПИРУЙ из справочника
 

Asar

Новичок
Гм...
Для каждого сообщения нужно название темы для того, чтобы запросить все сообщения данной темы (для одной таблицы как же иначе?). А выводить то естественно я его буду только в начале.

Копирую из справочника:
SELECT SUM (amt)
Я подставил MAX вместо SUM.
 

Фанат

oncle terrible
Команда форума
покажи место, откуда ты это скопировал

-~{}~ 07.04.05 13:46:

Для каждого сообщения нужно название темы для того, чтобы запросить все сообщения данной темы
ты ничего не путаешь? ты ПО НАЗВАНИЮ хочешь группировать сообщения?
вообще, это мысль. все сообщения, к примеру, с названием "ХЕЛППППП!!!!!!!" идут в один и тот же топик.
рационально придумано.

по-моему, ты запутался.
тебе айди темы нужно, чтобы получить название темы , а название темы нужно для того, чтобы получить айди темы.

Может быть, ты соберёшься с мыслями и скажешь внятно - для чего тебе отдельный айди темы, и чем не устраивает общий индекс id для всех записей?
 

Asar

Новичок
Источник:
http://www.mysql.ru/docs/gruber/mg06.html

Рассказываю:
Как выяснилось в этом же топике, можно (нужно?) делать все сообщения/темы форума в одной таблице.

Тогда. Для того, чтобы вывести все сообщения определенной темы у каждого сообщения должен быть какой то идентификатор, по которому можно определить, к какой теме он относится.
Таким идентификатором может служить собственно_название темы (у данного способа есть недостаток, к примеру, такой - будут глюки, если два пользователя создадут темы с одинаковым названием) или id темы, который назначается ей при создании.
Если было бы 2 таблицы - тогда в одной хранились бы связки id темы / тема, а во второй - все данные о конкретном посте + id темы.
В случае же одной таблицы я хотел, было, приляпать название темы к первому посту темы и там же сделать id. К остальным же постам лепить только id, т. к. название можно узнать из первого.
 

Фанат

oncle terrible
Команда форума
http://www.mysql.ru/docs/gruber/mg06.html
увы, там опечатка. скобку надо писать, конечно же, слитно с названием функции. вед иначе, через пробел, парсер ждёт ключевое слово from, а получает скобку.
Для того, чтобы вывести все сообщения определенной темы у каждого сообщения должен быть какой то идентификатор, по которому можно определить, к какой теме он относится.
я всё никак в толк не возьму - а чем тебя не устраивает id записи, которая является заголовком темы?
 

Asar

Новичок
По поводу МАХ - понял, теперь все вычисляется. Спасибо.

По поводу id - т. е. для первой записи заполнять поле "название темы", а для остальных записей заполнять поле "id заглавной записи"? Такой вариант мне просто в голову не приходил :) Пасиб, так и сделаю.

З.Ы. Зато выяснил, как максимум вычислять...
 

Фанат

oncle terrible
Команда форума
таким образом составлять список тем очень просто.
просто выбираешь те строки, у которых поле "айди родителя" равно нулю.
 

Asar

Новичок
Сам бы делал - не в жизнь не подумал бы, что форум можно запихнуть всего в одну таблицу... Даже когда сам до двух таблиц дошел, и то испугался - как то маловато выглядит...
 

Фанат

oncle terrible
Команда форума
у меня прекрасно работает форум, причём он был пару лет назад переделан из лесенки в простыню.
и всё - на одной таблице.
единственная проблема - если хочешь показывать и автора сообщения, и последнего ответившего. туцт придётся покумекать.
а остальное делается легко
 

Asar

Новичок
Имеется ввиду, что можно что то сделать, чтобы при выводе содержания форума (т. е. списка топиков) не делать каждый раз запрос о каждом топике - дата последнего сообщения и его автор?
 
Сверху