Взялся написать небольшой движек форума на PHP + MySQL. Примерно как это должно выглядеть представляю но первое с чем пришлось столкнуться, это как логичнее составить таблицу. Изначально задумал так: 1я таблица (forum_index), содержит заголовки форумов, запросы вида /view.php?forumid=1 и тд. Вторую таблицу (forum_thread), в которой заголовки тем и посты, запрос к теме вида /view.php?forumid=1&threadid=1 , при таком запросе подключается к базе, и из таблицы forum_thread, по переданным параметрам forumid и threadid сортирует и выводит посты. При отсутствии в запросе threadid, сортирует по параметру forumid и выводит заголовки тем форума. Проблема возникла при написании функции добавления новой темы, с добавление к заголовку идентификатора, по которому бы потом можно было сортировать посты принадлежащие к определенной теме. threadid при создании новой темы, назначается по принципу: подключается к таблице, узнает количество заголовков Код (Text): count($row[threadid]) , и прибавляет к результату единицу (возможно это нелогично, но так можно обеспечить не повторяющиеся id.) При добавлении поста к теме, threadid этой темы будет сущевствовать, и при отправке поста передаваться- эти обеспечиваю принадлежность постов к определенной теме. Но в процессе наполнеия форума, получится так, что в таблице будет много постов с одинаковым threadid, получается что на странице отображения списка тем, где идет сортировка по forumid, будут выведены все заголовки, даже с одинаковым threadid. Вопрос- как можно сделать выборку из таблицы так, чтобы был выведен только первый заголовок с threadid, или же логичнее под заголовки тем, вести отдельную таблицу?
И еще)) Может кто подскажет, как мне вычислять уникальный id для тем форумов, ведь в постах определенной темы id должен быть один. вот скрипт добавления, возможно в нем есть грубые нарушения, я только только начал интересоваться ПХП. Код (Text): /*----------------------------------------------------------------------------*/ $db = mysql_connect("localhost","admin","pass"); mysql_select_db("my_site", $db); /*----------------------------------------------------------------------------*/ if (empty($thread_title)){ echo "введите сообщение"; } else { $row = mysql_query ("SELECT * FROM forum_thread", $db); $arrow = mysql_fetch_array($row); $thread = count($arrow[threadid]); $threadid = $forumid.$thread; if (empty($username)){ $username = "Гость"; } $write = mysql_query ("INSERT INTO forum_thread (title,forumid,threadid,text,username) VALUES ('$thread_title','$forumid','$threadid','$thread_msg','$username')", $db); if ($write == true) { echo "все отлично"; } else { echo "ошибка"; } }; [/code]
Дофига букав. Хотите, чтобы быстрее ответили - напишите структуру базы и результат, который хотите видеть на выходе. Очень часто получается, что человек хочет одно, а описание совершенно другое. Или вообще не может ничего объяснить. Поэтому нагляднее пишите. По поводу второго. Есть такая вещь, как AUTO_INCREMENT и PRIMARY KEY. В сочетании - основа всего на свете. Вы вставляете запись и ей автоматически присваивается новый id, который никому более не сможет принадлежать. И тогда отпадает необходимость выбирать максимальный id. P.S. Второе я чего-то не пойму, что там вообще.. ))
Таблица, в которую должен вносить данные из формы с полями thread_title и thread_msg вышеуказанный скрипт имеет вид: | id | title | forumid | threadid | text | last_update | username | поле id - auto_increment, title и username - varchar, forumid и threadid - int, last_update - datetime. на выходе, запрос в котором отсутствует параметр threadid, должен отобразить страницы с заголовками тем, в противном случает, подключается к таблице, сортирует по forumid и threadid и выводит посты по данной теме.
PHP: <?php if (isset($_GET["threadid"])) { //Выводим тему } else { $query = 'SELECT DISTINCT `title` FROM `forum_thread`'; /итд } ?>