Автор Тема: выборка последних записей  (Прочитано 5684 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Enemy

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 204
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.lutsiv.com
выборка последних записей
« : 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"

работает некоректно...
Life is Good

Оффлайн alex007

  • Фанат форума
  • Ветеран
  • *****
  • Сообщений: 835
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.russians-in-london.co.uk/
выборка последних записей
« Ответ #1 : 06 Марта 2004, 20:10:47 »
Enemy
А на родине не мог посмотреть где продукт разрабатывали, так как умельцы по этому делу наверника что-то разработали и создали хак!

И во вторых
Цитировать
5 сообщений с разных тем

не получится, так как у тебя по dateline сортируется дело, поэтому только выйдут пять последних сообщения.
Русские-в-Лондоне. Как они там? Интересно. Инфо (FAQ), Форум и Магазин

Оффлайн Maniac

  • Ума нет - считай коллега
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 844
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
выборка последних записей
« Ответ #2 : 07 Марта 2004, 02:14:16 »
Enemy
Тебе нужно выбрать по пять последних из всех тем или по одному последнему из пяти разных тем?
TANSTAAFL

Оффлайн Enemy

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 204
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.lutsiv.com
выборка последних записей
« Ответ #3 : 09 Марта 2004, 14:21:17 »
Maniac
по одному последнему из пяти разных тем
Life is Good

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
выборка последних записей
« Ответ #4 : 09 Марта 2004, 18:07:01 »
попробуй так:
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
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн Enemy

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 204
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.lutsiv.com
выборка последних записей
« Ответ #5 : 09 Марта 2004, 18:46:29 »
Макс

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 короче совсем непонятно...
Life is Good

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
выборка последних записей
« Ответ #6 : 09 Марта 2004, 19:55:07 »
я не знаком со структурой таблиц ВБулетня.
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
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн Enemy

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 204
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.lutsiv.com
выборка последних записей
« Ответ #7 : 09 Марта 2004, 20:11:02 »
Макс
Ничего не изменилось работает и возвращает тот же результат что и предидущий запрос...

Вот структура таблиц:

[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 ;
Life is Good

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
выборка последних записей
« Ответ #8 : 09 Марта 2004, 20:25:23 »
Попробуй так

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 - те значения, которые дал первый запрос.
Результат правильный ?
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн Enemy

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 204
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.lutsiv.com
выборка последних записей
« Ответ #9 : 10 Марта 2004, 19:51:15 »
Цитировать
Попробуй так
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 pthread t WHERE p.threadid=t.threadid AND p.postid IN ($idsLIMIT 0,5


Теперь все работает. Большущее спасибо Макс
Life is Good

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28