0

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()
4

1 に答える 1