Forum Webscript.Ru
Общие => Базы данных => Тема начата: Enemy от 06 Марта 2004, 13:37:56
-
Структура моих таблиц (vbulletin)-
--------------
thread (темы)
threadid title lastpost forumid pollid open replycount .....
--------------
post (сообщения)
postid threadid username userid title dateline .....
--------------
мне нужно выбрать с таблицы post последних 5 сообщений с разных тем + обьединить по threadid с thread эти записи...
вот мой sql query:
"SELECT DISTINCT p.threadid,p.*,t.title AS titlethread,t.replycount FROM post p LEFT JOIN thread t ON p.threadid=t.threadid ORDER BY dateline DESC LIMIT 0,5"
работает некоректно...
-
Enemy
А на родине не мог посмотреть где продукт разрабатывали, так как умельцы по этому делу наверника что-то разработали и создали хак!
И во вторых
5 сообщений с разных тем
не получится, так как у тебя по dateline сортируется дело, поэтому только выйдут пять последних сообщения.
-
Enemy
Тебе нужно выбрать по пять последних из всех тем или по одному последнему из пяти разных тем?
-
Maniac
по одному последнему из пяти разных тем
-
попробуй так:
SELECT DISTINCT
p.threadid,p.*,t.title AS titlethread,t.replycount, [b]MAX(dateline)[/b]
FROM
post p
LEFT JOIN thread t ON p.threadid=t.threadid
[b]GROUP BY p.thread_id[/b]
ORDER BY dateline DESC LIMIT 0,5
-
Макс
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
-
Макс
Ничего не изменилось работает и возвращает тот же результат что и предидущий запрос...
Вот структура таблиц:
[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 - те значения, которые дал первый запрос.
Результат правильный ?
-
Попробуй так
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
Теперь все работает. Большущее спасибо Макс