улучшение запроса - PullRequest
       6

улучшение запроса

1 голос
/ 13 апреля 2011

Есть ли в любом случае, я могу улучшить этот запрос?

SELECT DISTINCT adb_product_type.strproduct_type AS strproduct_type, adb_product_cat.strproduct_cat AS strproduct_cat, adb_product.strproduct AS strproduct, 

CASE @campaignCount:= 
(SELECT COUNT(DISTINCT adb_campaign_1.campaign_id) 
FROM adb_camp_media AS adb_camp_media_1 
LEFT JOIN adb_campaign AS adb_campaign_1 ON adb_campaign_1.campaign_id = adb_camp_media_1.campaign_id
LEFT JOIN adb_camp_media_prod AS adb_camp_media_prod_1 ON adb_camp_media_prod_1.media_num = adb_camp_media_1.media_num 
WHERE 
(adb_camp_media_1.inttotal_per_store = 1 AND adb_camp_media_1.lngproduct = adb_product.lngproduct OR adb_camp_media_1.inttotal_per_store > 1 AND adb_camp_media_prod_1.lngproduct = adb_product.lngproduct)
AND (
(
adb_campaign_1.start_date
BETWEEN '2011-01-01'
AND '2011-01-31'
)
OR (
adb_campaign_1.end_date
BETWEEN '2011-01-01'
AND '2011-01-31'
)
OR (
adb_campaign_1.start_date < '2011-01-01'
AND adb_campaign_1.end_date > '2011-01-31'
)
) 
) 
WHEN 0 THEN 'No' ELSE 'Yes' END AS 'YesNo', 

CASE @campaignCount WHEN 0 THEN '' ELSE @campaignCount END AS 'CampaignCount', 
CASE @campaignCount WHEN 0 THEN '' ELSE 

(SELECT GROUP_CONCAT(DISTINCT adb_media_1.name ORDER BY adb_media_1.name SEPARATOR ', ' ) 
FROM adb_camp_media AS adb_camp_media_1 
LEFT JOIN adb_campaign AS adb_campaign_1 ON adb_campaign_1.campaign_id = adb_camp_media_1.campaign_id 
LEFT JOIN adb_camp_media_prod AS adb_camp_media_prod_1 ON adb_camp_media_prod_1.media_num = adb_camp_media_1.media_num 
LEFT JOIN adb_media AS adb_media_1 ON adb_media_1.media_id = adb_camp_media_1.media_id
WHERE 
(adb_camp_media_1.inttotal_per_store = 1 AND adb_camp_media_1.lngproduct = adb_product.lngproduct OR adb_camp_media_1.inttotal_per_store > 1 AND adb_camp_media_prod_1.lngproduct = adb_product.lngproduct)
AND (
(
adb_campaign_1.start_date
BETWEEN '2011-01-01'
AND '2011-01-31'
)
OR (
adb_campaign_1.end_date
BETWEEN '2011-01-01'
AND '2011-01-31'
)
OR (
adb_campaign_1.start_date < '2011-01-01'
AND adb_campaign_1.end_date > '2011-01-31'
)
) 
) 

END AS mediaName , adb_product.lngproduct

FROM adb_product_type 
LEFT JOIN adb_product_cat ON adb_product_cat.lngproduct_type = adb_product_type.lngproduct_type 
LEFT JOIN adb_product ON adb_product.lngproduct_cat = adb_product_cat.lngproduct_cat 
LEFT JOIN adb_camp_media ON adb_camp_media.lngproduct = adb_product.lngproduct 
LEFT JOIN adb_media ON adb_media.media_id = adb_camp_media.media_id 
LEFT JOIN adb_camp_media_prod ON adb_camp_media_prod.media_num = adb_camp_media.media_num 
LEFT JOIN adb_campaign ON adb_campaign.campaign_id = adb_camp_media.campaign_id 
WHERE 1=1 


ORDER BY YesNo DESC , strproduct_type, strproduct_cat, strproduct 

СТРУКТУРА ТАБЛИЦЫ

- Структура таблицы для таблицы adb_camp_media

CREATE TABLE adb_camp_media (media_num int(11) NOT NULL auto_increment, campaign_id int (11) NOT NULL по умолчанию '0', media_id int (11) NOT NULL по умолчанию '0', inttotal_per_store int (4) NOT NULL по умолчанию '0', units_per_item int (2) по умолчанию NULL, lngproduct int (11) NOT NULL по умолчанию '0', rental_cost double (10,2) по умолчанию NULL, checkers_rental double по умолчанию NULL, hyper_rental double по умолчанию NULL, usave_rental double по умолчанию NULL, ls_rental double (10,2) по умолчанию '0.00',spar_rental double (10,2) по умолчанию '0,00', задняя панель tinyint (1) NOT NULL, PRIMARY KEY (media_num), KEY campaign_id (campaign_id, media_id, lngproduct), KEY lngproduct (lngproduct)) ENGINE = MyISAM DEFAULT CHARSET = latin1;


-

- Структура таблицы для таблицы adb_camp_media_prod

CREATE TABLE adb_camp_media_prod (media_prod_id int (11) NOT NULL auto_increment, media_num int(4) NOT NULL, lngproduct int (4) NOT NULL, ПЕРВИЧНЫЙ КЛЮЧ (media_prod_id), KEY media_num (media_num, lngproduct), KEY lngproduct (lngproduct)) ENGINE = MySAM CHARSET ПО УМОЛЧАНИЮ = latin1;


-

- Структура таблицы для таблицы adb_campaign

CREATE TABLE adb_campaign (campaign_id int (11) NOT NULL auto_increment, client_id int (11) NOT NULL по умолчанию '0', campaign_namevarchar (50) NOT NULL по умолчанию '', текст описания, position_desc text, дата start_date NOT NULL по умолчанию '0000-00-00', дата end_date NOT NULL по умолчанию '0000-00-00', утвержденный tinyint (1) NOT NULL по умолчанию'0', дата создания_даты NOT NULL по умолчанию '0000-00-00', дата обновления_даты по умолчанию NULL, user_id int (11) NOT NULL по умолчанию '0', pinno varchar (50) NOT NULL по умолчанию '', jobno varchar (30)NOT NULL по умолчанию '', quoteno varchar (30) NOT NULL по умолчанию '', sales_ae_id int (11) по умолчанию NULL, artwork_specno varchar (30) NOT NULL по умолчанию '', artwork_jobno varchar (30) NOT NULL по умолчанию '', агентство tinyint (1) NOT NULL по умолчанию '0', brand_name varchar (50) NOT NULL по умолчанию' ', paypercycle tinyint (1) NOT NULL по умолчанию' 0 ', agency_comm double по умолчанию NULL, вариант varchar (100) по умолчанию NULL, pack_size varchar (100) по умолчанию NULL, скидка по умолчанию по умолчанию NULL, discount_val double по умолчанию NULL, sales_comm double NOT NULL по умолчанию '0', отменено tinyint (1) по умолчанию '0', onhold tinyint (1) по умолчанию '0', campaign_status_id int (4) по умолчанию NULL, PRIMARY KEY (campaign_id), UNIQUEKEY jobno (jobno), KEY start_date (start_date), KEY end_date (end_date), KEY campaign_name (campaign_name), KEY user_id (user_id, отменено, onhold)) ENGINE = MyISAM DEFAULT CHARSET = latin1;


-

- Структура таблицы для таблицы adb_product

CREATE TABLE adb_product (lngproduct int (11) NOT NULL auto_increment, strproduct varchar (100) NOT NULL по умолчанию '', lngproduct_cat int(11) NOT NULL по умолчанию '0', PRIMARY KEY (lngproduct), KEY lngproduct_cat (lngproduct_cat)) ENGINE = MyISAM DEFAULT CHARSET = latin1;


-

- Структура таблицы для таблицы adb_product_cat

CREATE TABLE adb_product_cat (lngproduct_cat int (11) NOT NULL auto_increment, strproduct_cat varchar (100) NOT NULL по умолчанию '', lngproduct_type int (11) NOT NULLпо умолчанию '0', PRIMARY KEY (lngproduct_cat), KEY lngproduct_type (lngproduct_type)) ENGINE = MyISAM DEFAULT CHARSET = latin1;


-

- Структура таблицы для таблицы adb_product_type

CREATE TABLE adb_product_type (lngproduct_type int (11) NOT NULL auto_increment, strproduct_type varchar (100) NOT NULL по умолчанию '', ПЕРВИЧНЫЙ КЛЮЧ (lngproduct_type)) ENGINE = MyISAM * DEFAULT CHARSET = lat

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...