Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: SELECT так чтоб id не повторялось
 
 автор: Yakor   (20.05.2006 в 17:01)   письмо автору
 
 

Делаю такой запрос:

SELECT * 
FROM bb_topics, bb_posts
WHERE topics.topic_id = posts.topic_id
ORDER BY 'post_time' DESC 
LIMIT 0 , 5 


Он выводит последние 5 тем в которых недавно отписались.

Проблема в том что значения topic_id не редко повторяются.
Например последние 2 поста - в одной теме, тогда выводится 5 тем из которых 2 - одинаквые.

Как добавить условие чтобы избежать повторения topic_id

Зарание спасибо.

   
 
 автор: Yakor   (20.05.2006 в 17:09)   письмо автору
 
   для: Yakor   (20.05.2006 в 17:01)
 

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



CREATE TABLE 'topics' (
  'topic_id' mediumint(8) unsigned NOT NULL auto_increment,
  'forum_id' smallint(8) unsigned NOT NULL default '0',
  'topic_title' char(60) NOT NULL default '',
  'topic_poster' mediumint(8) NOT NULL default '0',
  'topic_time' int(11) NOT NULL default '0',
  'topic_first_post_id' mediumint(8) unsigned NOT NULL default '0',
  'topic_last_post_id' mediumint(8) unsigned NOT NULL default '0',
  'topic_moved_id' mediumint(8) unsigned NOT NULL default '0',
  PRIMARY KEY  ('topic_id'),
  KEY 'forum_id' ('forum_id'),
  KEY 'topic_moved_id' ('topic_moved_id'),
  KEY 'topic_status' ('topic_status'),
  KEY 'topic_type' ('topic_type')
);



CREATE TABLE 'posts' (
  'post_id' mediumint(8) unsigned NOT NULL auto_increment,
  'topic_id' mediumint(8) unsigned NOT NULL default '0',
  'forum_id' smallint(5) unsigned NOT NULL default '0',
  'poster_id' mediumint(8) NOT NULL default '0',
  'post_time' int(11) NOT NULL default '0',
  'post_username' varchar(25) default NULL,
  PRIMARY KEY  ('post_id'),
  KEY 'forum_id' ('forum_id'),
  KEY 'topic_id' ('topic_id'),
  KEY 'poster_id' ('poster_id'),
  KEY 'post_time' ('post_time')
);

   
 
 автор: cheops   (20.05.2006 в 17:43)   письмо автору
 
   для: Yakor   (20.05.2006 в 17:01)
 

Сгруппируйте результат при помощи конструкции GROUP BY по полю topics.topic_id
SELECT * 
FROM bb_topics, bb_posts 
WHERE topics.topic_id = posts.topic_id 
ORDER BY post_time DESC 
GROUP BY topics.topic_id
LIMIT 0 , 5

   
 
 автор: Yakor   (20.05.2006 в 18:37)   письмо автору
 
   для: cheops   (20.05.2006 в 17:43)
 

Спасибо огромное! Каждый раз удивляюсь на сколько велики возможности sql :)

Только мне пишет ошибку

SELECT * 
FROM bb_topics, bb_posts
WHERE bb_topics.topic_id = bb_posts.topic_id
ORDER BY bb_posts.post_time DESC 
GROUP BY bb_topics.topic_id
LIMIT 0 , 5 

Check the manual that corresponds to your MySQL server version for the right syntax to use near 'GROUP BY bb_topics.topic_id 
LIMIT 0 , 5' at line 5 

   
 
 автор: Yakor   (20.05.2006 в 19:12)   письмо автору
 
   для: Yakor   (20.05.2006 в 18:37)
 

Cheops спасибо огромное!

а ошибка оказалоси из-за того что надо вначале груп, у уж потом ордер.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования