Мде... 1). Зачем отдельную таблицу? Есть таблица новостей, есть таблица коментов. [sql] CREATE TABLE news ( nws_id int(11) unsigned NOT NULL auto_increment, nws_text text NOT NULL, nws_added datetime NOT NULL, nws_heading varchar(100) default NULL nws_comments int(11) default '0', PRIMARY KEY (nws_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE news_comments ( nec_id int(11) unsigned NOT NULL auto_increment, nec_nws_id int(11) unsigned NOT NULL, nec_prf_id int(11) unsigned NOT NULL, nec_msg text NOT NULL, nec_creation_date datetime NOT NULL, PRIMARY KEY (nec_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; [/sql] При добавлении комента вам надо сделать такой запрос: PHP: <?php mysql_query('UPDATE news SET nws_comments = (SELECT COUNT(*) FROM news_comments WHERE nec_nws_id = '.(int)$news_id.') WHERE nws_id = '.(int)$news_id, $db); ?> В итоге при показе новости вам нужно делать выборку только из news, что бы показать кол-во коментариев к данной новости, а коменты как правило выводятся на отдельной странице обычно, поэтому это самый правильный и эффективный вариант. Накладываем нужные индексы на таблицы и вообще всё зашибись будет. И статистику тоже можно всякую вывести. В таблице комментов nec_prf_id есть id пользователя, запостившего коммент. Можно легко построить остальные запросы, типа сколько каждый из пользователей запостил комментов (как счётчик сообщений на форуме), можно по дням сделать статистику и.т.д. Просто, удобно, понятно и быстро.
Psih угу, так тоже нормально... только ты как и я в задачу не врубился =) о новостях с коментами тут речь не идёт, всё гараздо проще.
xak2 ну попробуй. типичный структура таблицы: id nick - примерно 10 символов text - римерно 150 символов time - 10 символов. число записей - миллион. и сравни.. $r = mysql_query("select * from table"); $c = mysql_num_rows($r); и $r = mysql_query("select count(*) from table"); echo join('',mysql_fetch_row($r)); и еще не забудь, что перельешь от mysql к php 170 000 000 символов. и тут очень немаленькая вероятность, что он тебя просто пошлет сославшись на memory_limit
Hight Главное идея и хороший пример. А упростить его уже много проще. Между прочим речь идёт какраз о новостях. Просто тот шаблон, что он запостил - это коменты к новостям. Покрайней мере я так это понял.
гы, ничего себе куда вы уехали? а добавить столбец первым id и сказать что значения типа int и включить уникальность, а? бугага, я в шоке. Зачем так глубоко ковырять? Когда у человека созданная его же руками таблица, её структуру он может поменять в любое время.
ниха глюкануло, я почему то решил что нужен уникальный номер для каждой выведенной записи... тыды да, шаман прав.
действительно, все заработало. спасибо большое! но есть 2 нюанса, которые меня беспокоят: 1. человек добавил коммент, и если после этого refresh'ит страницу, то выскакивает 'the page cannot be refreshed without sending the information...". после этого коммент добавляется по новой. этого можно как-то избежать? 2. как проверить поле comment на наличие текста? на данный момент можно добавлять пустые комменты, только с именем.
1. после добавления через header('Location:xxx') обновить страницу 2. наверное if(strlen($_POST['comment'])<50) { // ошибка! коммент не может содержать менее 50 символов. идеология понятна? рыщим по форуму - неоднократно встречалось
У меня для новостей так: Код (Text): list($comnum) = $db->sql_fetchrow($db->sql_query("SELECT Count(*) FROM ".$prefix."_comment WHERE cid = '$pid'")); P.S. Разумееться класс для работы с бд поэтому заменить если что на обычные mysql_query