次の問題を解決する方法について誰かが私にアイデアを投げてくれませんか:
データベースに写真、ビデオ、タグがあります。タグは写真やビデオに関連付けることができます。データベースにクエリを実行して、7 日以内に変更されたタグ ID とカウントを取得し、それらを画像およびビデオ アセットとの関連付けの数で並べ替える必要があります。
つまり、最後に、過去 7 日間で最も多くの写真またはビデオに関連付けられたタグを出力できるということです。私が持っているフィールドでDB構造を書き留めました
VIDEO
ID
PICTURE
ID
PICTURE_ATTRMAPPING
CS_OWNERID (ID of picture)
CS_ATTRID ( will store ID of the tag attribute (picture_tag or video_tag))
ASSETVALUE ( will store ID OF THE associated tag)
VIDEO_ATTRMAPPING
CS_OWNERID (ID of video)
CS_ATTRID ( will store ID of the tag attribute (picture_tag or video_tag))
ASSETVALUE ( will store ID OF THE associated tag)
TAG
ID
UPDATEDATE
ATTRIBUTES (picture_tag attribute ID is stored here)
ID
NAME
タグ、動画、画像、属性が別々のテーブルに保存されていることがわかります。VIDEO/PICTURE_ATTRMAPPING テーブルに CS_ATTRID 列のビデオまたは画像タグ属性 ID と ASSETVALUE 列のタグの ID を持つレコードがある場合、タグがビデオまたは画像によって参照されている (つまり、ビデオ/画像にタグの関連付けがある) ことがわかります。
サブクエリを使用したクエリになると想定しているため、このタスクをサブタスクに分割し、必要なすべての情報を取得する方法を見つけ始めました。
ビデオ オブジェクトと画像オブジェクトのタグ属性の ID を必ず取得する必要があります。
SELECT id FROM ATTRIBUTES WHERE NAME = 'picture_tag' OR NAME = 'video_tag'
また、n 日経過したタグをクエリする方法の例:
SELECT id FROM TAG WHERE updateddate BETWEEN TO_DATE('2013-08-20 00:00:00', 'yyyy-mm-dd hh24:mi:ss') AND CURRENT_DATE
これはおそらく見た目ほど複雑ではありませんが、クエリ全体がどのように見えるべきか、何から始めるべきかについてはわかりません。誰かがアイデアやサンプルを投げてくれませんか?
私は oracle を使用していますが、mysql にも精通しているため、どの DBMS からのサンプルも素晴らしいでしょう。私が自分自身を十分に明確にしたかどうか教えてください。