Общие > Базы данных
выборка последних записей
Enemy:
Макс
SELECT DISTINCT
p.threadid,p.*,t.title AS titlethread,t.replycount, MAX(p.dateline)
FROM
post p
LEFT JOIN thread t ON p.threadid=t.threadid
GROUP BY p.threadid
ORDER BY dateline DESC LIMIT 0,5
Все равно не то... Темы разные но сообщения выбирает не последние - выводит или первое сообщение темы или 2,3 короче совсем непонятно...
Макс:
я не знаком со структурой таблиц ВБулетня.
dateline - это дата создания сообщения ?
Попробуй еще такой вариант (он с точки зрения теории неправильный, но в данном случае может сработать):
--- Код: ---SELECT
p.threadid,p.*,t.title AS titlethread,t.replycount, [b]MAX(p.postid)[/b]
FROM
post p
LEFT JOIN thread t ON p.threadid=t.threadid
GROUP BY p.thread_id
ORDER BY p.postid DESC LIMIT 0,5
--- Конец кода ---
Enemy:
Макс
Ничего не изменилось работает и возвращает тот же результат что и предидущий запрос...
Вот структура таблиц:
--- Код: ---
[B]TABLE `post`[/B] (
`postid` int(10) unsigned NOT NULL auto_increment,
`threadid` int(10) unsigned NOT NULL default \'0\',
`username` varchar(50) NOT NULL default \'\',
`userid` int(10) unsigned NOT NULL default \'0\',
`title` varchar(100) NOT NULL default \'\',
`dateline` int(10) unsigned NOT NULL default \'0\',
`attachmentid` smallint(5) unsigned NOT NULL default \'0\',
`pagetext` mediumtext NOT NULL,
`allowsmilie` smallint(6) NOT NULL default \'0\',
`showsignature` smallint(6) NOT NULL default \'0\',
`ipaddress` varchar(16) NOT NULL default \'\',
`iconid` smallint(5) unsigned NOT NULL default \'0\',
`visible` smallint(6) NOT NULL default \'0\',
`edituserid` int(10) unsigned NOT NULL default \'0\',
`editdate` int(10) unsigned NOT NULL default \'0\',
PRIMARY KEY (`postid`),
KEY `iconid` (`iconid`),
KEY `userid` (`userid`),
KEY `threadid` (`threadid`,`userid`)
) TYPE=MyISAM AUTO_INCREMENT=1 ;
[B]TABLE `thread`[/B] (
`threadid` int(10) unsigned NOT NULL auto_increment,
`title` varchar(100) NOT NULL default \'\',
`lastpost` int(10) unsigned NOT NULL default \'0\',
`forumid` smallint(5) unsigned NOT NULL default \'0\',
`pollid` int(10) unsigned NOT NULL default \'0\',
`open` tinyint(4) NOT NULL default \'0\',
`replycount` int(10) unsigned NOT NULL default \'0\',
`postusername` varchar(50) NOT NULL default \'\',
`postuserid` int(10) unsigned NOT NULL default \'0\',
`lastposter` varchar(50) NOT NULL default \'\',
`dateline` int(10) unsigned NOT NULL default \'0\',
`views` int(10) unsigned NOT NULL default \'0\',
`iconid` smallint(5) unsigned NOT NULL default \'0\',
`notes` varchar(250) NOT NULL default \'\',
`visible` smallint(6) NOT NULL default \'0\',
`sticky` smallint(6) NOT NULL default \'0\',
`votenum` smallint(5) unsigned NOT NULL default \'0\',
`votetotal` smallint(5) unsigned NOT NULL default \'0\',
`attach` smallint(5) unsigned NOT NULL default \'0\',
PRIMARY KEY (`threadid`),
KEY `iconid` (`iconid`),
KEY `forumid` (`forumid`,`visible`,`sticky`,`lastpost`)
) TYPE=MyISAM AUTO_INCREMENT=1 ;
--- Конец кода ---
Макс:
Попробуй так
--- Код: ---
SELECT p.postid, MAX(dateline)
FROM post p
GROUP BY p.thread_id
DESC LIMIT 0,5
--- Конец кода ---
получишь 5 post_id. Запомни их и выполни:
--- Код: ---SELECT p.*,t.title AS titlethread,t.replycount
FROM post p , thread t WHERE p.threadid=t.threadid AND p.postid IN (1,2,3,4,5)
DESC LIMIT 0,5
--- Конец кода ---
где 1,2,3,4,5 - те значения, которые дал первый запрос.
Результат правильный ?
Enemy:
--- Цитировать ---Попробуй так
--- Код: ---SELECT p.postid, MAX(dateline)
FROM post p
GROUP BY p.thread_id
DESC LIMIT 0,5
--- Конец кода ---
--- Конец цитаты ---
так работало но выбирало не то... короче я переделал так и заработало -
--- Код: ---
SELECT [COLOR=red]MAX(p.postid)[/COLOR] FROM post p GROUP BY [COLOR=red]p.threadid[/COLOR] DESC LIMIT 0,5
--- Конец кода ---
--- Цитировать ---получишь 5 post_id. Запомни их и выполни:
--- Код: ---
SELECT p.*,t.title AS titlethread,t.replycount
FROM post p , thread t WHERE p.threadid=t.threadid AND p.postid IN (1,2,3,4,5)
[COLOR=red]DESC LIMIT 0,5[/COLOR]
--- Конец кода ---
--- Конец цитаты ---
здесь DESC глючил без ORDER и я его убрал
SELECT p.*,t.title AS titlethread,t.replycount FROM post p, thread t WHERE p.threadid=t.threadid AND p.postid IN ($ids) LIMIT 0,5
Теперь все работает. Большущее спасибо Макс
Навигация
Перейти к полной версии