Имееться вот такой запрос
SELECT SQL_CALC_FOUND_ROWS item.* ,
(SELECT metro FROM catalog_metro as metro WHERE metro.id = item.metro LIMIT 1) as metroname ,
(SELECT alias FROM catalog_metro as metro WHERE metro.id = item.metro LIMIT 1) as m_alias,
(SELECT rajon_id FROM catalog_metro as metro WHERE metro.id = item.metro LIMIT 1) as rajon_id,
(SELECT rajon FROM catalog_rajoni as rajon WHERE rajon_id = rajon.id LIMIT 1) as rajon,
(SELECT alias FROM catalog_rajoni as rajon WHERE rajon_id = rajon.id LIMIT 1) as r_alias,
(SELECT option FROM catalog_option as option WHERE item.option = option.id LIMIT 1) as option,
(SELECT alias FROM catalog_option as option WHERE item.option = option.id LIMIT 1) as n_alias,
(SELECT color FROM catalog_color as color WHERE color.id = item.color LIMIT 1) as color,
(SELECT alias FROM catalog_color as color WHERE color.id = item.color LIMIT 1) as coloralias,
(SELECT GROUP_CONCAT(service) as srv FROM catalog_gs as gs where gs.item=item.id GROUP BY gs.item) as gs
FROM catalog_item as item WHERE 1 ORDER by item.order ASC
Вопрос в том как несколько очень похожих по своей сути подзапроса свести в один, и стоит ли это делать (исходя из производительности)
З.Ы. таблица большая около 600к строк , само собой это не все условия в where, просто упрощение для того что бы меньше писать, все равно они тут не существенны
По Вопросам в комментариях: да вы правы лимит тут не нужен там сравнение 1 к 1 кроме момента с GROUP_CONCAT там многое к 1 пробовал переписать все это join'ами но это привило к увеличению времени запроса, За подсказку с PRIMARY KEY уже спасибо
По структурам таблица item это список с кучей параметров (id значений из других таблиц в которых соответственно у свойств есть свои атрибуты) та таблица что service там просто список item.id и service.id из еще одной таблицы не участвующей в данном запросе
SELECT
MIN(items_tabl.name_field),
MIN(metro.metro) as metroname,
MIN(metro.alias) as m_alias,
MIN(metro.rajon_id),
FROM items_tabl
JOIN metro ON metro.id = items_tabl.metro
GROUP BY items_tabl.FIELD_NAME_PRIMARY_KEY;
FIELD_NAME_PRIMARY_KEY - это название поля в таблице
Здесь групировка идет по полю PRIMARY_KEY, оно имеет индекс, за счет этого запрос будет работать значительно быстрее.
Про форматирования кода нужно помнить :) а то читать его почти нереально. Везде писать as так же не стоит, иногда без него код легче читать.
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Виртуальный выделенный сервер (VDS) становится отличным выбором
Добрый деньДля PostgreSQL можно установить пакет postgresql-contrib, с помощью которого можно использовать ltree, позволяющий хранить древовидные структуры...
Здравствуйте! Помогите, пжлст, составить запрос, если таковой вообще возможенЕсть две таблицы
Есть сайт на wordpress с большим количеством объявлений (тип записи, созданный темой)Я добавил для объявлений новое произвольное мета-поле cp_wholespare,...
Помогите понять почему вылетает с ошибкой "SystemFormatException: Входная строка имела неверный формат