1

から最初の画像を取得する必要がありportfolio_imagesますが、次のクエリはそれを行っていません。見つかった最初のレコードのみが必要な場合、見つかった各レコードのすべての画像を返しますportfolio(これは DISTINCT で機能します) portfolio_images.fullsize

ポートフォリオ

id | project_name | location_id | project_type | is_active

ポートフォリオ画像

id | portfolio_id | fullsize

 SELECT DISTINCT p.project_name, pi.fullsize
    FROM portfolio p
    INNER JOIN portfolio_images pi ON p.id = pi.portfolio_id
    AND p.is_active = 1
    AND p.project_type = 'project' AND p.location_id = 3
    ORDER BY p.oindex

portfolio最初にクエリを実行してから、それらの結果をループし、ネストされたループを実行portfolio_imagesして、現在のポートフォリオ ID に基づいて最初に返されたレコードをクエリすることを避けたいと考えています。

4

1 に答える 1

2

portfolio_idtableのそれぞれの最後の ID を取得するサブクエリを追加しますportfolio_images。これにより、それぞれに対して 1 つのレコードが確実に取得されますproject_name

SELECT  p.project_name, pi.fullsize
FROM    portfolio p
        INNER JOIN portfolio_images pi 
            ON p.id = pi.portfolio_id AND 
                p.is_active = 1 AND 
                p.project_type = 'project' AND 
                p.location_id = 3
        INNER JOIN
        (
            SELECT  portfolio_id, MAX(ID) max_ID
            FROM    portfolio_images 
            GROUP BY portfolio_id
        ) a ON pi.portfolio_id = a.portfolio_id AND
                pi.ID = a.max_ID
ORDER   BY p.oindex
于 2013-01-12T00:37:41.440 に答える