私は昨年、stackoverflowを大幅に使用してきました。これは、優れた貢献者による優れた情報源です。今こそ助けを求める時です。
設定は正常です:Orders、OrderArticles、Articles
昨年の間に販売された記事の合計量を取得したいのですが、ベスト5週間のみです。
WEEK関数とUNIXTIMEを気にしないでください-何とか何とか-私はそれをカバーしています。私の質問は、ストアドプロシージャまたは関数に頼らずに実行できるかどうかです。
各週と記事の要約のサブクエリを作成し、合計の降順で結果を並べ替えています。今-クエリを5に制限するだけです。簡単ですが、ArticleIDで結果をフィルタリングする必要がありますが、サブクエリ内にいるため、外部のArticleIDにアクセスできず、結果に参加する-手遅れです;-)
構文(実際のSQLがないと理解しにくいですよね...?)
SELECT a.ID, [more fields], omg.total
FROM Articles AS a
LEFT JOIN
(
SELECT weeklytotals.articleID, weeklytotals.total
FROM
(
SELECT SUM(ra.quantity) AS total, ra.articleID AS articleID
FROM OrderArticles ra
INNER JOIN Orders r
ON ra.orderID = r.ID
WHERE r.timeCreated >= UNIX_TIMESTAMP('2011-06-30')
GROUP BY ra.articleID, WEEK(FROM_UNIXTIME(r.timeCreated))
ORDER BY SUM(ra.quantity) DESC
) AS weeklytotals
WHERE omg.articleID = a.ID --<-- THIS IS NOT WORKING BUT NECESSARY!
LIMIT 0, 5
) AS omg
ON omg.articleID = a.ID
WHERE a.isEnabled = 1 --more WHERE-thingys
これにより、上位5つの記事が返され、それらが正しい記事に関連付けられます。わーい。
SUM関数(omg-SELECTに入る可能性があります)を省略しました。
わかりますか?何が欲しいのか分かりますか?はい、もちろんです!
よろしくお願いします。
編集:条件が変更されました-これは私の人生を楽にしますが、それでも問題の解決策があるかどうか知りたいです。