VVWind
Новичок
У меня есть запрос и он еще расширяется в скрипте. Сам запрос выполняется в течение 20 секунд при 1 000 000+ записях в таблице.
С одной стороны, можно выполнить это в php скрипте, но вы понимаете, сколько там будет циклов, плюс количество left join может быть расширено вообще до 10+ с различными названиями таблиц (типа address_1 или field_365).
Суть естественно проста, мне просто нужно собрать массив со всеми данными всех полей основываясь на cid.
То есть, если делать в скрипте, к примеру вместо left join в одном запросе делать 10+ запросов mysql_query с селектами а после с mysql_fetch_array доставать айди и выбирать снова в других таблицах все, получится огромнейшее количество циклов с перебором массивов, чтобы каждый элемент полного массива с данными имел совпадающую по айди информацию.
К примеру, представим если выбрали в client_1 5 записей, там cid = (1,2,3,4,5)
После с помощью IN выбрали в phone_1. А там оказалось 15 записей, так как телефонов по несколько на одного клиента. То есть теперь надо делать цикл с перебором, чтобы присоединять правильно к клиенту телефоны. Представьте, что будет с 1000 записями.
Есть ли возможно оптимизировать этот запрос, не переходя на вариант решения задачи в скрипте?
PHP:
SELECT client_1.*, GROUP_CONCAT(distinct tags.value SEPARATOR ', ') as tags, GROUP_CONCAT(distinct phone_1.phone SEPARATOR ', ') as phone,
GROUP_CONCAT(distinct email_1.email SEPARATOR ', ') as email
FROM client_1
LEFT JOIN phone_1
ON phone_1.cid = client_1.cid
LEFT JOIN email_1
ON email_1.cid = client_1.cid
LEFT JOIN tags
ON tags.tid in (select distinct tid from client_tag_1 where cid=client_1.cid)
WHERE client_1.deleted='0000-00-00 00:00:00' or client_1.deleted=''
GROUP BY client_1.cid limit 0, 1000
Суть естественно проста, мне просто нужно собрать массив со всеми данными всех полей основываясь на cid.
То есть, если делать в скрипте, к примеру вместо left join в одном запросе делать 10+ запросов mysql_query с селектами а после с mysql_fetch_array доставать айди и выбирать снова в других таблицах все, получится огромнейшее количество циклов с перебором массивов, чтобы каждый элемент полного массива с данными имел совпадающую по айди информацию.
К примеру, представим если выбрали в client_1 5 записей, там cid = (1,2,3,4,5)
После с помощью IN выбрали в phone_1. А там оказалось 15 записей, так как телефонов по несколько на одного клиента. То есть теперь надо делать цикл с перебором, чтобы присоединять правильно к клиенту телефоны. Представьте, что будет с 1000 записями.
Есть ли возможно оптимизировать этот запрос, не переходя на вариант решения задачи в скрипте?