MySQL Forums
Forum List  »  Newbie

Re: Question about LIMIT
Posted by: Dmitriy Reznik
Date: December 29, 2010 08:26AM

Thank you very much for your help. I started eliminating left outer joins as you suggested, and even without removing GROUP BY b.BookStem it became several times faster. But I still have problems with restructuring this part:
MAX(CASE WHEN r.r_type = 'Print' THEN r.Excerpts END) PrintReviews,
(CASE WHEN MAX(CASE WHEN rr.Award LIKE 'PW%' THEN 1 ELSE 0 END) = 1 THEN 'X' ELSE '' END) AS PW,
(CASE WHEN MAX(CASE WHEN rr.Award LIKE 'BookList%' THEN 1 ELSE 0 END) = 1 THEN 'X' ELSE '' END) AS BL,
(CASE WHEN MAX(CASE WHEN rr.Award LIKE 'Library Journal%' THEN 1 ELSE 0 END) = 1 THEN 'X' ELSE '' END) AS LJ,
(CASE WHEN MAX(CASE WHEN rr.Award LIKE 'BookPage%' THEN 1 ELSE 0 END) = 1 THEN 'X' ELSE '' END) AS BP,
...
FROM BookList b
LEFT OUTER JOIN
(SELECT BookStem, r_type, GROUP_CONCAT(DISTINCT Excerpt SEPARATOR '<br />') Excerpts
FROM Reviews
GROUP BY BookStem, r_type) r
ON b.BookStem = r.BookStem
LEFT OUTER JOIN Reviews rr ON b.BookStem = rr.BookStem

Could you please help me with this?
The whole query now looks like this:
SELECT b.Title,
(SELECT GROUP_CONCAT(DISTINCT CONCAT(a.LastName, ', ', a.FirstName) SEPARATOR '<br />') FROM AuthorLinks al JOIN Authors a ON al.AuthorStem = a.AuthorStem WHERE b.BookStem = al.BookStem) AS Author,
(SELECT GROUP_CONCAT(DISTINCT CONCAT(n.LastName, ', ', n.FirstName) SEPARATOR '<br />') FROM NarratorLinks nl JOIN Narrators n ON nl.NarratorStem = n.NarratorStem WHERE b.BookStem = nl.BookStem) AS Narrator,
(SELECT GROUP_CONCAT(DISTINCT CONCAT(bc.Subject) SEPARATOR '<br />') FROM BisacLinks bl JOIN BisacCodes bc ON bl.BisacCode = bc.BisacCode WHERE b.BookStem = bl.BookStem) AS Genre,
b.PublicationDate, b.Imprint, b.1stPrint as FirstPrint,
CASE WHEN b.OrigAudPubDate IS NULL OR b.HCDate IS NULL THEN NULL
WHEN b.OrigAudPubDate <= b.HCDate OR
(b.OrigAudPubDate > b.HCDate AND b.OrigAudPubDate < DATE_ADD(b.HCDate, INTERVAL 3 MONTH))
THEN 'front'
WHEN b.OrigAudPubDate > DATE_ADD(b.HCDate, INTERVAL 3 MONTH)
THEN 'back'
END AS FrontlistBacklist,
(SELECT GROUP_CONCAT(DISTINCT CONCAT(ar.Name, ': ', ar.QltyReview) SEPARATOR '<br />') FROM AudioReviews ar WHERE b.BookStem = ar.BookStem) AS QltyReview,
MAX(CASE WHEN r.r_type = 'Print' THEN r.Excerpts END) PrintReviews,
(CASE WHEN MAX(CASE WHEN rr.Award LIKE 'PW%' THEN 1 ELSE 0 END) = 1 THEN 'X' ELSE '' END) AS PW,
(CASE WHEN MAX(CASE WHEN rr.Award LIKE 'BookList%' THEN 1 ELSE 0 END) = 1 THEN 'X' ELSE '' END) AS BL,
(CASE WHEN MAX(CASE WHEN rr.Award LIKE 'Library Journal%' THEN 1 ELSE 0 END) = 1 THEN 'X' ELSE '' END) AS LJ,
(CASE WHEN MAX(CASE WHEN rr.Award LIKE 'BookPage%' THEN 1 ELSE 0 END) = 1 THEN 'X' ELSE '' END) AS BP,
b.DL_Rank, b.HC_Rank, b.BookStem
FROM BookList b
-- LEFT OUTER JOIN (AuthorLinks al JOIN Authors a ON al.AuthorStem = a.AuthorStem)
-- ON b.BookStem = al.BookStem
-- LEFT OUTER JOIN (NarratorLinks nl JOIN Narrators n ON nl.NarratorStem = n.NarratorStem)
-- ON b.BookStem = nl.BookStem
-- LEFT OUTER JOIN (BisacLinks bl JOIN BisacCodes bc ON bl.BisacCode = bc.BisacCode)
-- ON b.BookStem = bl.BookStem
-- LEFT OUTER JOIN AudioReviews ar
-- ON b.BookStem = ar.BookStem
LEFT OUTER JOIN
(SELECT BookStem, r_type, GROUP_CONCAT(DISTINCT Excerpt SEPARATOR '<br />') Excerpts
FROM Reviews
GROUP BY BookStem, r_type) r
ON b.BookStem = r.BookStem
LEFT OUTER JOIN Reviews rr ON b.BookStem = rr.BookStem
GROUP BY b.BookStem ORDER BY b.BookStem -- limit 0, 100

Options: ReplyQuote


Subject
Written By
Posted
December 22, 2010 07:59AM
December 22, 2010 08:41AM
December 22, 2010 08:50AM
December 22, 2010 10:47AM
December 22, 2010 03:05PM
December 22, 2010 03:16PM
December 28, 2010 08:06AM
December 22, 2010 04:38PM
December 28, 2010 08:08AM
December 28, 2010 03:23PM
Re: Question about LIMIT
December 29, 2010 08:26AM
December 29, 2010 08:53AM
December 29, 2010 09:42AM
December 29, 2010 09:55AM


Sorry, you can't reply to this topic. It has been closed.

Content reproduced on this site is the property of the respective copyright holders. It is not reviewed in advance by Oracle and does not necessarily represent the opinion of Oracle or any other party.