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

Форум MySQL

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

 

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

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

тема: Надо избавиться от GROUP BY
 
 автор: Diablo_   (11.06.2009 в 01:33)   письмо автору
 
 

Есть две таблицы:
-- Структура таблицы `comments`
-- 

CREATE TABLE `comments` (
  `id` int(11) NOT NULL auto_increment,
  `section` int(2) NOT NULL,
  `id_page` int(11) NOT NULL,
  `id_user` int(11) NOT NULL,
  `date` int(10) NOT NULL,
  `comment` text NOT NULL,
  PRIMARY KEY  (`id`),
  KEY `section` (`section`,`id_page`,`date`)
) ENGINE=MyISAM AUTO_INCREMENT=384 DEFAULT CHARSET=cp1251 AUTO_INCREMENT=384 ;

-- --------------------------------------------------------

-- 
-- Структура таблицы `gallery_picture`
-- 

CREATE TABLE `gallery_picture` (
  `id` int(11) NOT NULL auto_increment,
  `id_user` int(11) NOT NULL default '0',
  `user_name` varchar(25) NOT NULL default '',
  `gen_name` int(10) NOT NULL default '0',
  `work_name` varchar(100) NOT NULL default '',
  `id_section` int(11) NOT NULL default '0',
  `kinds` smallint(1) NOT NULL default '0',
  `description` text NOT NULL,
  `counts` int(11) NOT NULL default '0',
  `lost_comment` int(10) NOT NULL default '0',
  `type_program` varchar(100) NOT NULL default '',
  `comment` int(5) NOT NULL default '0',
  `date` int(10) NOT NULL default '0',
  `voite` float NOT NULL default '0',
  `moder` tinyint(1) NOT NULL default '0',
  `status_work` tinyint(1) NOT NULL default '0',
  PRIMARY KEY  (`id`),
  KEY `id_section` (`id_section`,`date`),
  KEY `id_user` (`id_user`,`date`),
  KEY `date` (`date`)
) ENGINE=MyISAM AUTO_INCREMENT=3673 DEFAULT CHARSET=cp1251 AUTO_INCREMENT=3673 ;


Мне нужно вытащить 20 последних комментариев из этих двух таблиц!
Запрос я сделал, всё работает, вот запрос:

SELECT DISTINCT
`comments`.`date`,
`comments`.`comment`,
`gallery_picture`.`id`,
`gallery_picture`.`gen_name`,
`gallery_picture`.`work_name`,
`gallery_picture`.`id_section`
FROM
`comments`
INNER JOIN `gallery_picture` ON `gallery_picture`.`id` = `comments`.`id_page`
WHERE `comments`.`section` = '1' AND `gallery_picture`.`moder`='1' GROUP BY `comments`.`id_page` ORDER BY `comments`.`date` DESC LIMIT 20

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

Но вот GROUP BY увеличивает скорость генерации кода, почти в 3 раза! хотя всё что только возможно, проиндексировано!
Можно ли как то устроить запрос так, что бы не было GROUP BY?
И второе, я читал как то в статье, что INNER JOIN да и вообще JOIN, лучше не использовать! А место него, прописать таблицы, через запятую и использовать ON!
Так ли это? Если да, то как такое вообще организовать?

  Ответить  
 
 автор: Trianon   (11.06.2009 в 01:35)   письмо автору
 
   для: Diablo_   (11.06.2009 в 01:33)
 

>Но вот GROUP BY увеличивает скорость генерации кода, почти в 3 раза! хотя всё что только возможно, проиндексировано!
>Можно ли как то устроить запрос так, что бы не было GROUP BY?

Если GROUP BY увеличивает скорость, то зачем Вы хотите его убрать?
Вы действительно хотите уменьшить скорость?

Поубывав-бы.

  Ответить  
 
 автор: Diablo_   (11.06.2009 в 01:45)   письмо автору
 
   для: Trianon   (11.06.2009 в 01:35)
 

Сорри!))) Конечно же уменьшает скорость! Медленее выполняется запрос!

  Ответить  
 
 автор: Trianon   (11.06.2009 в 01:48)   письмо автору
 
   для: Diablo_   (11.06.2009 в 01:45)
 

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

  Ответить  
 
 автор: Diablo_   (11.06.2009 в 01:52)   письмо автору
 
   для: Trianon   (11.06.2009 в 01:48)
 

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

  Ответить  
 
 автор: Trianon   (11.06.2009 в 01:55)   письмо автору
 
   для: Diablo_   (11.06.2009 в 01:52)
 

Я заметил, что когда жарю себе яичницу, то время приготовления завтрака увеличивается примерно в 50 раз по сравнению со временем, когда я обхожусь сырым яйцом.
Результат чуть не тот... менее вкусный, на мой взгляд.
Вопрос: можно ли получить яичницу, не жаря при этом яйцо?

  Ответить  
 
 автор: Diablo_   (11.06.2009 в 02:12)   письмо автору
 
   для: Trianon   (11.06.2009 в 01:55)
 

ну ты блин загнул!
Короче тоже самое, можно получить другим запросом? Кроме GROUP BY есть ещё варианты?

  Ответить  
 
 автор: ronin80   (11.06.2009 в 09:40)   письмо автору
 
   для: Diablo_   (11.06.2009 в 02:12)
 

а что значит повторяющиеся комментарии?

  Ответить  
 
 автор: Diablo_   (11.06.2009 в 12:25)   письмо автору
 
   для: ronin80   (11.06.2009 в 09:40)
 

должно быть:
1,3,5,6,8,9,11,12,46.........
А выдаёт:
1,1,1,3,5,8,8,8,9......

  Ответить  
Rambler's Top100
вверх

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