我正在構建一個複雜的多表MySQL查詢,即使它工作,我想知道我可以使它更簡單。這是這個複雜的MySQL多表查詢的最佳方法嗎?
它背後的想法是,使用記錄所有網站交互的事件表,選擇10個最受歡迎的博客帖子的ID,標題和Slug,並按大多數命中降序排序。
SELECT content.id, content.title, content.slug, COUNT(events.id) AS hits
FROM content, events
WHERE events.created >= DATE_SUB(NOW(), INTERVAL 1 MONTH)
AND events.page_url REGEXP '^/posts/[0-9]'
AND content.id = events.content_id
GROUP BY content.id
ORDER BY hits DESC
LIMIT 10
博客文章的URL具有以下格式:
/posts/2013-05-16-hello-world
正如我所提到它似乎工作,但我敢肯定,我可以做這個乾淨。
感謝,
您應該使用ANSI JOIN語法,但除此之外,它看起來很簡單的給我。 – Barmar
除了不使用'JOIN'外,'REGEXP'對我來說是醜陋的一部分。如果'events'表可以按類型對事件進行分類會更好,所以你只需要尋找'events.type ='post''之類的東西。 (我有點猜測爲什麼你甚至需要首先看一下'page_url',可能有一些'events'是同一件'content'的,不應該被計算在內。) – grossvogel