Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите оптимизировать сложный запрос, Пожалуйста :-) 
:(
    Опции темы
DeMx
Дата 2.5.2007, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 18.11.2006

Репутация: нет
Всего: нет



Запрос:
Код

SELECT
        CONCAT(
            '/photos/',
            pgc.pg_cat_name,
            '/'
        ) AS pg_cat_path,
        pgc.pg_cat_title,
        CONCAT(
            '/photos/',
            pgc.pg_cat_name,
            '/',
            pg.gallery_name,
            '/'
        ) AS gallery_path,
        pg.gallery_title,
        pg.gallery_desc,
        p.report_id,
        p.report_num,
        p.file_type,
        p.report_preview,
        UNIX_TIMESTAMP(pg.date_add) AS date_add,
        DATE_FORMAT(pg.time_add, '%H:%i') AS time_add
    FROM
        reports_galleries AS pg
    LEFT JOIN reports_galleries_cats AS pgc ON (pg.pg_cat_id = pgc.pg_cat_id)
    LEFT JOIN reports_types AS pt ON (pgc.pg_cat_type = pt.type_id)
    LEFT JOIN reports AS p ON (
        p.report_status = 1 AND
        p.report_id IN (SELECT MAX(p2.report_id) FROM reports AS p2 WHERE p2.gallery_id = pg.gallery_id)
    )
    WHERE
        pg.gallery_status = 1 AND
        pg.gallery_access = 0 AND
        pgc.pg_cat_type = '1'
    GROUP BY
        pg.gallery_id
    ORDER BY
        pg.gallery_id DESC,
        p.report_id DESC


Таблицы:
Код

CREATE TABLE `reports` (
  `report_id` int(11) NOT NULL auto_increment,
  `report_num` int(11) NOT NULL default '0',
  `report_status` tinyint(1) NOT NULL default '0',
  `gallery_id` int(11) NOT NULL default '0',
  `file_type` varchar(5) NOT NULL default '',
  `report_preview` varchar(255) NOT NULL default '',
  `report_views` bigint(20) NOT NULL default '0',
  `rating` int(11) NOT NULL default '0',
  `rating_voters` int(11) NOT NULL default '0',
  `rating_vip` int(11) NOT NULL default '0',
  `rating_voters_vip` int(11) NOT NULL default '0',
  `comments_lock` tinyint(1) NOT NULL default '0',
  `date_add` date NOT NULL default '0000-00-00',
  `time_add` time NOT NULL default '00:00:00',
  PRIMARY KEY  (`report_id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 ;


CREATE TABLE `reports_galleries` (
  `gallery_id` int(11) NOT NULL auto_increment,
  `type_id` int(11) NOT NULL default '0',
  `pg_cat_id` int(11) NOT NULL default '0',
  `place_id` int(11) NOT NULL default '0',
  `user_id` int(11) NOT NULL default '0',
  `photographer_id` int(11) NOT NULL default '0',
  `photographer_name` varchar(100) NOT NULL default '',
  `gallery_access` tinyint(1) NOT NULL default '0',
  `gallery_pass` varchar(50) NOT NULL default '',
  `gallery_status` tinyint(1) NOT NULL default '0',
  `gallery_subscribe` tinyint(1) NOT NULL default '0',
  `gallery_name` varchar(100) NOT NULL default '',
  `gallery_title` varchar(100) NOT NULL default '',
  `gallery_desc` text NOT NULL,
  `email_lock` tinyint(1) NOT NULL default '0',
  `comments_lock` tinyint(1) NOT NULL default '0',
  `rating` int(11) NOT NULL default '0',
  `rating_voters` int(11) NOT NULL default '0',
  `date_add` date NOT NULL default '0000-00-00',
  `time_add` time NOT NULL default '00:00:00',
  PRIMARY KEY  (`gallery_id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 ;

CREATE TABLE `reports_galleries_cats` (
  `pg_cat_id` int(11) NOT NULL auto_increment,
  `pg_cat_type` tinyint(1) NOT NULL default '0',
  `pg_cat_faces` tinyint(1) NOT NULL default '0',
  `pg_cat_name` varchar(100) NOT NULL default '',
  `pg_cat_title` varchar(100) NOT NULL default '',
  PRIMARY KEY  (`pg_cat_id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 ;

CREATE TABLE `reports_types` (
  `type_id` int(11) NOT NULL auto_increment,
  `type_name` varchar(100) NOT NULL default '',
  `type_title` varchar(100) NOT NULL default '',
  `type_title_m` varchar(50) NOT NULL default '',
  `file_title` varchar(100) NOT NULL default '',
  `file_title_2` varchar(50) NOT NULL default '',
  PRIMARY KEY  (`type_id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 ;


Сейчас при выполнении этого запроса сервер возвращает "You probably tried to upload too large file."

Структуру менять нельзя... и хотелось бы сделать все в одном запросе.

А нужно мне вытащить запись из reports_galleries (галереи), вместе с последней записью из reports (файлы галереи). Файлы галереи бывают нескольких типов (в данном случае это 'photos'). Типы файлов хранятся в reports_types.
PM MAIL WWW   Вверх
Glip
Дата 2.5.2007, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 473
Регистрация: 30.12.2006

Репутация: 3
Всего: 18



сделайте explain. может быть имеет смысл добавить индексы на поля использующиеся в связях, сортировке и вычислении максимального значания?


--------------------
user posted image
PM MAIL   Вверх
muzer
Дата 2.5.2007, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 387
Регистрация: 31.8.2006

Репутация: 30
Всего: 31



DeMx, Гугл с Яндексом сказали, что проблема в phpMyAdmin, он не может съесть такой большой файл с запросами. Видимо упирается в лимиты установленные в php.ini или ещё что-то. Советуют обновить phpMyAdmin или разбить файл на несколько.
Если это действительно так, то вы неправильно ставите вопрос, нужно указывать, что используете phpMyAdmin - эта приблуда - источник множества проблем, судя по форуму.
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0857 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.