Сортировка в форуме по последним сообщениям

DenVeroid

Новичок
Сортировка в форуме по последним сообщениям

есть запрос
$result = mysql_query("SELECT * FROM thread WHERE id_forum='$forum' ORDER BY id_thread DESC limit $limitlower,$perpage");

который выводить последние созданные темы, но он выводит с сортировкой та что была создана последняя то наверху, но надо чтобы также но

и ещё по последнему сообщению, как на этом форуме.

А то неудобно като получается, допустим есть тема на самой последней странице если ктото ответит на неё то оно должна быть на самом верху

тоесть на первой странице, а тут поучается что она натомже самом месте, и никто не узнает о новом сообщении

Структура таблици такая

CREATE TABLE forums (
id_forum int(10) NOT NULL auto_increment,
forum_name varchar(200) NOT NULL default '',
forum_desc text NOT NULL,
forum_order int(10) unsigned NOT NULL default '0',
forum_icon varchar(255) NOT NULL default '',
name_alias varchar(200) NOT NULL default '',
PRIMARY KEY (id_forum),
KEY id (id_forum)
)

CREATE TABLE thread (
id_thread int(10) NOT NULL auto_increment,
id_forum int(10) NOT NULL default '0',
thread_title varchar(250) NOT NULL default '0',
thread_avtor varchar(50) default NULL,
thread_time varchar(25) NOT NULL default '0',
thread_views int(5) NOT NULL default '0',
day char(2) NOT NULL default '',
month char(2) NOT NULL default '',
year varchar(4) NOT NULL default '',
hour char(2) NOT NULL default '',
minute char(2) NOT NULL default '',
second char(2) NOT NULL default '',
thread_body text NOT NULL,
thread_email varchar(50) default NULL,
PRIMARY KEY (id_thread),
KEY id (id_thread)
) TYPE=MyISAM;

CREATE TABLE topic (
id_topic int(11) NOT NULL auto_increment,
topic_time varchar(25) default '0',
id_forum int(11) unsigned NOT NULL default '0',
topic_avtor varchar(30) NOT NULL default '0',
topic_last_post_id int(11) unsigned NOT NULL default '0',
day char(2) NOT NULL default '',
month char(2) NOT NULL default '',
year varchar(4) NOT NULL default '',
hour char(2) NOT NULL default '',
minute char(2) NOT NULL default '',
second char(2) NOT NULL default '',
topic_body text NOT NULL,
topic_thread int(10) unsigned NOT NULL default '0',
topic_email varchar(50) NOT NULL default '',
thread_title varchar(250) NOT NULL default '',
PRIMARY KEY (id_topic),
KEY id (id_topic)
) TYPE=MyISAM;
 

Фанат

oncle terrible
Команда форума
Мда...
И этот чудик лезет обязательно в форум для профессионалв.
изменить условие сортировки - одно поле поменять в ORDER BY, просто поставить то поле, по которому сортировать - это ж какой мозг требуется! Не для средних умов, мда...
 

DenVeroid

Новичок
я же хотел в другой форум, ну ёлы палы, извените

ты хочеш сказать так

PHP:
$result = mysql_query("SELECT * FROM thread,topic WHERE id_forum='$forum'  ORDER BY thread.id_thread DESC, topic.id_topic DESC limit $limitlower,$perpage");
если так делать то ничего невыводит
 

vovanium

Новичок
to DenVeroid:
ты бы хоть посмотрел на структуру таблиц других форумов (например, ibf, vb, phpbb). Я бы рекомендовал для форума добавить в таблицу thread поля в которых будет указываться дата последнего сообщения в теме и его автор, т.к. таблица с сообщениями самая большая в форуме, то лишний раз в неё лазить не нужно. И главное дату храни не в виде 6 полей char, а в виде количества секунд с начала эпохи и выборку в твоём случае обычно делают не по id, а по дате и времени.
 

DenVeroid

Новичок
я потом просто добавил дополнительные поля в таблице thread

topic_last_post_day char(2) NOT NULL default '',
topic_last_post_month char(2) NOT NULL default '',
topic_last_post_year varchar(4) NOT NULL default '',
topic_last_post_hour char(2) NOT NULL default '',
topic_last_post_minute char(2) NOT NULL default '',
topic_last_post_second char(2) NOT NULL default '',
topic_last_post_id int(11) NOT NULL default '0',

где topic_last_post_id int(11) NOT NULL default '0',
содержит последний id пост темы

а сам запрос переделал так

PHP:
$result = mysql_query("SELECT * FROM thread WHERE id_forum='$forum' and thread_status='1' ORDER BY topic_last_post_id DESC, id_thread DESC  limit $limitlower,$perpage");   $limitlower,$perpage
теперь с начала сортируется по id номеру поста, а потом id темы


Насамом деле я первый раз пишу форум, может вчёмто могу и ошибаться, к примеру насчёт даты ранее я так всёгда делал с новостным движком, ну и решил сздесь так сделать
 

vovanium

Новичок
Тебе же сказали сохраняй врямя и дату в одном поле как INT и почитай как пользоваться php-функцией date.
 

DenVeroid

Новичок
Тебе же сказали сохраняй врямя и дату в одном поле как INT и почитай как пользоваться php-функцией date
сейчас переделывать, надо дофига испровлять код, я потом если что буду что нибудь подобное писать то так и зделаю

а функцией date я умею обращаться, вот только как потом определять из поля какой год, месяц, и т.д
 

Compote

Guest
topic_last_post_day char(2) NOT NULL default '',
topic_last_post_month char(2) NOT NULL default '',
topic_last_post_year varchar(4) NOT NULL default '',
topic_last_post_hour char(2) NOT NULL default '',
topic_last_post_minute char(2) NOT NULL default '',
topic_last_post_second char(2) NOT NULL default '',
topic_last_post_id int(11) NOT NULL default '0',
какой ужас, зачем??
достаточно одного поля типа DATE, DATETIME или TIMESTAMP

почитай: http://www.mysql.com/doc/ru/Date_and_time_types.html
 

Compote

Guest
и вообще тебе правильно сказали, посмотри структуру других форумов. у тебя структура таблиц очень плохая, нет четкой связи между таблицами.
 

DenVeroid

Новичок
PHP:
Compote
, у мне пока лень каждый форум просматривать (или один), хотя они у меня все есть, форум почти написал и уже переписывать времени уйдёт много
 

Vetal

Новичок
анекдот:
ленивый кот говорит: "Слышали вчера вопли? Это я себе на яйца наступил - лень было встать."
 
Сверху