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

Форум MySQL

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

 

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

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

тема: Помогите упростить запрос.
 
 автор: serenya1983   (03.05.2012 в 08:34)   письмо автору
 
 


SELECT e.`client_id` AS `pacient_id`,e.id AS event_id,e.externalId,c.lastName,c.patrName,c.firstName,c.birthDate,
                                    

        
                (SELECT `value` FROM ActionProperty_OrgStructure   WHERE id =  
                    (SELECT id FROM ActionProperty AS ap WHERE action_id = (
                                                                            SELECT `id` FROM `Action` WHERE `event_id` =e.`id` AND     actionType_id={$actionType_id} ORDER BY `begDate` DESC LIMIT 1
                                                                           )
                                                                AND EXISTS (SELECT id FROM ActionPropertyType WHERE name='Отделение пребывания' AND id=ap.type_id)                                                                 
                    
                                                                         
                    )      

            ) AS `orgStructure_id`
                                                                         

    
        FROM `Action` AS a
        INNER JOIN (`Event` AS e,Client AS c) ON (e.id = a.event_id AND c.id = e.client_id)
        
        
        WHERE a.`actionType_id`= {$actionType_id} AND a.`endDate` IS NULL



место долгой работы - получение orgStructure_id, если без этого - время выполнения около 0.006 сек., а с получение orgStructure_id - около 0,6 секунды. При этом используемые ORDER и LIMIT в запросах получения orgStructure_id важны для получения нужного значения.

или есть попроще запрос:


    SELECT e.`client_id` AS `pacient_id`,e.id AS event_id,e.externalId,c.lastName,c.patrName,c.firstName,c.birthDate,

                    (SELECT `person_id` FROM `Action` WHERE `event_id` =e.`id` AND     actionType_id={$actionType_id} ORDER BY `begDate` DESC LIMIT 1)  AS person_id
    
        FROM `Action` AS a
        INNER JOIN (`Event` AS e,Client AS c) ON (e.id = a.event_id AND c.id = e.client_id)
        
        
        WHERE a.`actionType_id`= {$actionType_id} AND a.`endDate` IS NULL ORDER BY orgStructure_id DESC


Тут проблемное место получение person_id, возможно ли его включить в основной запрос выборки с сохранением условий!?

  Ответить  
 
 автор: Valick   (03.05.2012 в 12:47)   письмо автору
 
   для: serenya1983   (03.05.2012 в 08:34)
 

Зачем пихать в запрос вложенные запросы если они по сути не используются в основном запросе?
Отдельно
 (SELECT `value` FROM ActionProperty_OrgStructure   WHERE id = 
(SELECT id FROM ActionProperty AS ap WHERE action_id = (
 SELECT `id` FROM `Action` WHERE `event_id` =e.`id` AND actionType_id={$actionType_id} ORDER BY `begDate` DESC LIMIT 1
 )
 AND EXISTS (SELECT id FROM ActionPropertyType WHERE name='Отделение пребывания' AND id=ap.type_id) 

Сколько выполняется по времени?
Для полноценного ответа на ваш вопрос, нужен детальный анализ структуры таблиц
например почему поле event_id имеет тип varchar? И я так подозреваю не только одно оно.

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

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