|
|
|
| Есть две таблицы:
-- Структура таблицы `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!
Так ли это? Если да, то как такое вообще организовать? | |
|
|
|
|
|
|
|
для: Diablo_
(11.06.2009 в 01:33)
| | >Но вот GROUP BY увеличивает скорость генерации кода, почти в 3 раза! хотя всё что только возможно, проиндексировано!
>Можно ли как то устроить запрос так, что бы не было GROUP BY?
Если GROUP BY увеличивает скорость, то зачем Вы хотите его убрать?
Вы действительно хотите уменьшить скорость?
Поубывав-бы. | |
|
|
|
|
|
|
|
для: Trianon
(11.06.2009 в 01:35)
| | Сорри!))) Конечно же уменьшает скорость! Медленее выполняется запрос! | |
|
|
|
|
|
|
|
для: Diablo_
(11.06.2009 в 01:45)
| | Вы хотите сказать, что если GROUP BY убрать, то запрос работает быстрее, выдавая при этом нужный результат? | |
|
|
|
|
|
|
|
для: Trianon
(11.06.2009 в 01:48)
| | Да в том то и фигня, что выдаёт чуть не тот результат))) Выдаёт повторяющиеся комментарии! Но работает значительно быстрее!
Вот я и подумал, можно ли как то получить нужный результат, но с нормальной скоростью! | |
|
|
|
|
|
|
|
для: Diablo_
(11.06.2009 в 01:52)
| | Я заметил, что когда жарю себе яичницу, то время приготовления завтрака увеличивается примерно в 50 раз по сравнению со временем, когда я обхожусь сырым яйцом.
Результат чуть не тот... менее вкусный, на мой взгляд.
Вопрос: можно ли получить яичницу, не жаря при этом яйцо? | |
|
|
|
|
|
|
|
для: Trianon
(11.06.2009 в 01:55)
| | ну ты блин загнул!
Короче тоже самое, можно получить другим запросом? Кроме GROUP BY есть ещё варианты? | |
|
|
|
|
|
|
|
для: Diablo_
(11.06.2009 в 02:12)
| | а что значит повторяющиеся комментарии? | |
|
|
|
|
|
|
|
для: ronin80
(11.06.2009 в 09:40)
| | должно быть:
1,3,5,6,8,9,11,12,46.........
А выдаёт:
1,1,1,3,5,8,8,8,9...... | |
|
|
|
|