1

IS there anyway i can improve this query?

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 

TABLE STRUCTURE

-- Table structure for table adb_camp_media

CREATE TABLE adb_camp_media ( media_num int(11) NOT NULL auto_increment, campaign_id int(11) NOT NULL default '0', media_id int(11) NOT NULL default '0', inttotal_per_store int(4) NOT NULL default '0', units_per_item int(2) default NULL, lngproduct int(11) NOT NULL default '0', rental_cost double(10,2) default NULL, checkers_rental double default NULL, hyper_rental double default NULL, usave_rental double default NULL, ls_rental double(10,2) default '0.00', spar_rental double(10,2) default '0.00', backboard tinyint(1) NOT NULL, PRIMARY KEY (media_num), KEY campaign_id (campaign_id,media_id,lngproduct), KEY lngproduct (lngproduct) ) ENGINE=MyISAM DEFAULT CHARSET=latin1;


--

-- Table structure for table 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, PRIMARY KEY (media_prod_id), KEY media_num (media_num,lngproduct), KEY lngproduct (lngproduct) ) ENGINE=MyISAM DEFAULT CHARSET=latin1;


--

-- Table structure for table adb_campaign

CREATE TABLE adb_campaign ( campaign_id int(11) NOT NULL auto_increment, client_id int(11) NOT NULL default '0', campaign_name varchar(50) NOT NULL default '', description text, position_desc text, start_date date NOT NULL default '0000-00-00', end_date date NOT NULL default '0000-00-00', approved tinyint(1) NOT NULL default '0', created_date date NOT NULL default '0000-00-00', updated_date datetime default NULL, user_id int(11) NOT NULL default '0', pinno varchar(50) NOT NULL default '', jobno varchar(30) NOT NULL default '', quoteno varchar(30) NOT NULL default '', sales_ae_id int(11) default NULL, artwork_specno varchar(30) NOT NULL default '', artwork_jobno varchar(30) NOT NULL default '', agency tinyint(1) NOT NULL default '0', brand_name varchar(50) NOT NULL default '', paypercycle tinyint(1) NOT NULL default '0', agency_comm double default NULL, variant varchar(100) default NULL, pack_size varchar(100) default NULL, discount double default NULL, discount_val double default NULL, sales_comm double NOT NULL default '0', cancelled tinyint(1) default '0', onhold tinyint(1) default '0', campaign_status_id int(4) default NULL, PRIMARY KEY (campaign_id), UNIQUE KEY jobno (jobno), KEY start_date (start_date), KEY end_date (end_date), KEY campaign_name (campaign_name), KEY user_id (user_id,cancelled,onhold) ) ENGINE=MyISAM DEFAULT CHARSET=latin1;


--

-- Table structure for table adb_product

CREATE TABLE adb_product ( lngproduct int(11) NOT NULL auto_increment, strproduct varchar(100) NOT NULL default '', lngproduct_cat int(11) NOT NULL default '0', PRIMARY KEY (lngproduct), KEY lngproduct_cat (lngproduct_cat) ) ENGINE=MyISAM DEFAULT CHARSET=latin1;


--

-- Table structure for table adb_product_cat

CREATE TABLE adb_product_cat ( lngproduct_cat int(11) NOT NULL auto_increment, strproduct_cat varchar(100) NOT NULL default '', lngproduct_type int(11) NOT NULL default '0', PRIMARY KEY (lngproduct_cat), KEY lngproduct_type (lngproduct_type) ) ENGINE=MyISAM DEFAULT CHARSET=latin1;


--

-- Table structure for table adb_product_type

CREATE TABLE adb_product_type ( lngproduct_type int(11) NOT NULL auto_increment, strproduct_type varchar(100) NOT NULL default '', PRIMARY KEY (lngproduct_type) ) ENGINE=MyISAM DEFAULT CHARSET=latin1;

sebastian
  • 31
  • 4
  • What does this query do? Show table structure and tell us what you want as output? – Harry Joy Apr 13 '11 at 12:52
  • this query outputs a report of product types,product category,product -> the amount of campaigns assigned to that product and the amount of media assigned to each campaign – sebastian Apr 13 '11 at 12:55
  • Please clean up the formatting. This code is next to unreadable. There is a thread on the subject here: http://stackoverflow.com/questions/522356/what-sql-coding-standard-do-you-follow/17633875#17633875 – mzedeler Jul 17 '15 at 17:25

0 Answers0