4 つのテーブル、写真、タグ、photos_tags、および訪問があります。
訪問テーブルの係数の合計によって得られる係数で並べ替えられた最初の 30 枚の写真を選択する必要があります。
このクエリを試していますが、「すべての派生テーブルにはエイリアスが必要です」と言って失敗します
SELECT * FROM (
SELECT *, (SELECT SUM(count) FROM (SELECT * FROM visits AS Visits WHERE Visits.tag_id IN (
SELECT tag_id FROM photos_tags AS PhotosTags WHERE PhotosTags.photo_id = Photo.id
)))
) AS computed FROM photos AS Photo WHERE Photo.id NOT IN (
) ORDER BY computed LIMIT 30
) ORDER BY RAND()
編集: #1064 をスローしようとしているクエリ - SQL 構文にエラーがあります。使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください
SELECT * FROM (
SELECT *, (
SELECT SUM(Table1.count) FROM (
SELECT * FROM visits AS Visits WHERE Visits.tag_id IN (
SELECT tag_id FROM photos_tags AS PhotosTags WHERE PhotosTags.photo_id = Photo.id
)
) AS Table1
) AS computed FROM photos AS Photo WHERE Photo.id NOT IN (
) AS Table2 ORDER BY computed LIMIT 30
) AS Table3 ORDER BY RAND()
#1054 をスローする EDIT2 クエリ - 「where 句」の不明な列「Photo.id 」
SELECT * FROM (
SELECT *, (
SELECT SUM(Table1.count) FROM (
SELECT * FROM visits AS Visits WHERE Visits.tag_id IN (
SELECT tag_id FROM photos_tags AS PhotosTags WHERE PhotosTags.photo_id = Photo.id
)
) AS Table1
) AS computed FROM photos AS Photo WHERE photos.id NOT IN (
1,2
) ORDER BY computed LIMIT 30
) AS Table3 ORDER BY RAND()