私は現在、人々がビデオを見ているすべてのvid_idを選択し、ほとんどの視聴者によってそれらを並べ替えるクエリを持っています。誰かがビデオを見るたびに、scrusersonlineに項目vid_id
username
timestamp
という項目が作成されます。Select *タグ名がジャンクションテーブルにある
私はtag_mapテーブルとtagsテーブルも持っています。 tag_mapにはフィールドid
tag_id
とvid_id
が含まれ、タグにはフィールドtag_id
とname
が含まれています。すべてのvid_id結果が特定のタグ名に対してのみ表示されるように、以下のクエリを変更するだけです。専門家の助けを借りてありがとうございます。
変更しようとしているクエリ。 scrusersonlineには、フィールドvid_idのタイムスタンプusernameがあります。それは、ほとんどのユーザが降順で視聴し、vid_idを検索します。私はさらに、特定のタグ名
SELECT SQL_CALC_FOUND_ROWS scrusersonline.vid_id, COUNT(scrusersonline.id)
AS idcount FROM scrusersonline
GROUP BY scrusersonline.vid_id ORDER BY idcount DESC
以下のクエリにそれらの結果を制限したいと思い、単に特定のタグ名を持つすべてvid_id年代を選択する例であるが、ビデオのテーブルとリンクされています。それだけで、タグ名の結果を示しているように、私は、上記のクエリを変更できるようにしたいと思い
SELECT SQL_CALC_FOUND_ROWS video.* FROM tag_map
INNER JOIN tags2 ON tags2.tag_id = tag_map.tag_id
INNER JOIN video ON video.vid_id = tag_map.vid_id
WHERE name IN (?)
ORDER BY video.timestamp DESC LIMIT ?, ?
優秀、あなたの時間と援助X-Zeroに感謝します!ところで、idはtag_mapの一意のフィールドです。私は、それぞれの接続を参照することが有用であると思った。サロゲートキーが参照されているとはどういう意味ですか? – Scarface
'tag_map'の' id'は_surrogateキーです。つまり、テーブル内の行を一意に識別するために使用される人為的な(属性データではない)値です。しかし、純粋な/単純な相互参照テーブル( 'tag_map'のような)の場合、それらは無意味です。関係は一意の行であり、実際のデータを構成する外部キー参照は完全に受け入れられるキーです。 'id'自体はほとんど参照されません - データベースは属性列を使用しているので、あなたはそれらによって削除されるはずです... –
そうです。私はなぜそれを残したのか分かりません。私はそれを批判的に調べたことはありません。もう一度X-Zeroに感謝します。本当に役に立ちました。本当に感謝しています。 – Scarface