SQL:ステートメントは、1対多の関係で親あたり1つのレコードを表示します

StackOverflow https://stackoverflow.com/questions/896561

  •  23-08-2019
  •  | 
  •  

質問

私は2つのテーブル、商品テーブルと画像テーブルを有しています。製品には、レコードごとに1枚の以上の画像を持つことができます。私は、1枚の製品あたりの画像ではなく、製品ごとのすべての画像が一覧表示されます、SQL文を必要としています。

私の現在の努力のスケールダウン例があります:

SELECT Product.RefCode, Img.ImgPath
FROM Product INNER JOIN (
    SELECT ProductImg.ImgPath, ProductImg.PrdFK
    FROM ProductImg 
    LIMIT 0,1) AS Img ON Product.PrdID = Img.PrdFK;

上記の例では、0の結果を返しIサブからLIMIT 0,1を削除する場合、しかし、私はすべての製品とすべての画像の完全なリストを取得し選択します。

私は、製品レコードにつき1つの画像レコードが返されることにしたい。

<時間>

私は、MySQLに「プログラマ」のコードを改訂している、それが正常に動作します。

SELECT Product.RefCode, 
        (Select ProductImg.ImgPath
         From ProductImg
         Where Product.PrdID = Img.PrdFK LIMIT 0,1) AS ImgPath
FROM Products

は、「ビルKarwinの」ソリューションをしようといくつかの理由、それは長い時間のために、サーバーの負荷を送信します。

役に立ちましたか?

解決

この作業をする必要があります:

SELECT Product.RefCode,
       (Select Img.ImgPath
        From ProductImg
        Where Product.PrdID = Img.PrdFK LIMIT 0,1) As ImgPath
FROM Product
あなたはどの画像を決定する方法を持っている場合は、

を選択し、リターンは、あなたは、サブ選択にどこで、多分秩序を追加することができますする必要があります。

次の例では、我々はアクティブな画像のみ最新を取得します。

SELECT Product.RefCode,
       (Select Img.ImgPath
        From ProductImg
        Where Product.PrdID = Img.PrdFK
          And IsActive = 1
        Order By EntryDate Desc LIMIT 0,1) As ImgPath
FROM Product

'0,1を制限' に 'トップ1' を編集して修正します。

他のヒント

MySQLはここにいくつかの柔軟性を有します。あなたは、製品ごとに1つの行に結果を制限するためにGROUP BYを使用することができ、その後、MySQLは任意にどの画像を選択します。実際には、データベースに物理的に最初に格納された画像になる傾向がありますが、それを制御することはできません。

SELECT p.RefCode, i.ImgPath
FROM Product p INNER JOIN ProductImg i 
  ON (p.PrdID = i.PrdFK)
GROUP BY p.PrdID;
あなたは、製品ごとに1 の特定ののイメージをしたい場合は、

、あまりにもそれを行うための方法があります。あなたの要件にそれを含める必要があります。 : - )

あなたがイメージ・テーブル上のID列を持っている場合、これは動作するはずです(何があっSQL製品またはバージョン) -

  
   SELECT
            p.RefCode,
            i1.ImgPath
    FROM
            Product p
    INNER JOIN
            ProductImg i1 ON p.PrdId = i1.PrdFk
    LEFT JOIN
            ProductImg i2 ON i1.PrdId = i2.PrdId
            AND i1.ImgId < i2.ImgId
    WHERE
            i2.ImgId IS NULL
  

あなたが必要なもの、表示されるメイン画像であるかどうかを指定するために、画像テーブル上のフラグです。そこ任意の画像を引き上げる方法がありますが、私はあなたが正しいイメージを引っ張ることを確認する方が良いと思います。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top