Встроенный Select запрос на xpdo
Как составить такой sql запрос на xpdo?
SELECT
BdOne.id_user, BdOne.date, BdOne.code, BdOne.serial,
(SELECT `serial2` FROM `modx_serials` AS Serials WHERE Serials.serial = BdOne.serial) AS serial2,
(SELECT `code` FROM `modx_codes` AS Codes WHERE Codes.code = BdOne.code) AS code
FROM `modxrdb_codes2` AS `BdOne`
Поблагодарить автора
Отправить деньги
Комментарии: 5
Этот запрос вообще неправильно составлен. Для таких случаев надо пользоваться JOIN, а не подзапросами. Перепишите запрос на JOIN и тогда по существующим в сети примерам можно будет легко составить запрос на xPDO.
он изначально был на JOIN написан, раньше всё работало нормально, но сейчас в BdOne 2 000 записей, в modx_serials 150 000 записей, а в modx_codes 20 000 записей и запрос не успевает отработать за 60 секунд, а с таким запросом который я привёл выше отрабатывается за 0.1 секунды
Может, нет индексов по полям serial и code в таблицах? Ну попробуйте сделать 3 отдельных запроса — сначала получить BdOne, а потом Serials и Codes. Вдруг, так будет лучше…
Да, спасибо, небыло индексов, сейчас с тем кодом где джойны уже быстро отрабатывает =)
вот так выглядит запрос
$q = $modx->newQuery('BdOne');
$q->leftJoin('Serials','Serials', 'BdOne.serial=Serials.serial');
$q->leftJoin('Codes', 'Codes', 'BdOne.code=Codes.code');
$q->select('BdOne.id_user,BdOne.date,BdOne.code,BdOne.serial,Serials.serial2,Codes.code');
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.