Yii Framework Forum: db/Query и поздапросы - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

db/Query и поздапросы как добавить подзапрос в условии join-а, Rate Topic: -----

#1 User is offline   ozi 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 8
  • Joined: 23-October 13

Posted 02 May 2016 - 10:15 AM

имеется сложный запрос с несколькими innerJoin:
$query = new Query();
...
$query->innerJoin(['phs' => '{{%vg_price_hotel_service}}'], 'phs.PriceId = prices.Id');
...

Все нормально работает.
Но необходимо добавить leftJoin, в ON условии которого имеется подзапрос вида:
LEFT JOIN [dbo].[HotelQuotas] as hqs ON hqs.Id =
(
    SELECT  TOP 1 Id
    FROM [dbo].[HotelQuotas]
    WHERE   BuildingId = blds.Id
    AND RoomCategoryId = rmcts.Id
    AND RoomTypeId = rmtps.Id
    AND TourOperatorId = prices.TourOperatorId
    AND (TypeVisit = 0 AND NOT ((DATEADD(DD, hs.Nights, prices.Date) < Date) OR (DATEADD(DD, Duration, Date) < prices.Date))
      OR TypeVisit = 1
      AND prices.Date >= Date
      AND prices.Date <= DATEADD(DD, Duration, Date)
      )
    ORDER BY Id DESC, FreeAccess ASC

все связи, blds, rmcts, rmtps, prices, hs определены в innerJoin-ах выше.
с какой стороны лучше подлезть... есть варианты? что-то не могу осилить
0

#2 User is offline   Isodem 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 19
  • Joined: 21-June 12

Posted 02 May 2016 - 10:19 AM

Могу сказать сразу что это будет тормозить если у тебя вырастет база. На сколько я знаю MySql плохо работает с подзапросами. В таких случая я обычно создаю отдельную таблицу или лучше view и туда кеширую данные. Если нельзя сделать кэш, например в тоем случае, лучше оформить это в коде. Я пробовал эксперементировать. Странно, но работает очень медленно, даже со всеми index.
0

#3 User is offline   qualitat 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 1
  • Joined: 07-May 16

Posted 07 May 2016 - 02:22 PM

Поделюсь реальным опытом.

MySQL. При таблице объёмом в 10 000 записей, время выполнения такого рода запроса составляло в среднем 20 секунд.

На данный момент таблица 3,5 млн. записей, запрос длится 3-4 секунды. Помогает кеш. Также пришлось избавиться от всех джоинов в принципе.

Вывод. Если хотябы чисто теоритически Вы планируете расширение базы данных, то откажитесь от такого подхода в mysql.
0

#4 User is offline   ozi 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 8
  • Joined: 23-October 13

Posted 09 May 2016 - 11:54 PM

спасибо большое, что привели пример из опыта... так и есть... таблица в 132к записей жутко тормозит.... а вырастет она очень быстро... буду искать другое решение ) хотя на MariaDb работает заметно быстрее... Mysql похоже и вправду с подзапросами не дружит
0

#5 User is offline   Kira Rumata 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 10
  • Joined: 14-January 16
  • Location:Montenegro

Posted 02 October 2016 - 09:17 PM

Я решил такую проблему через введение в sql переменных и присвоение им начальных значений. Потом в запросе используйте переменные.
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users