2

商品テーブルと画像テーブルの2つのテーブルがあります。商品には、レコードごとに複数の画像を含めることができます。製品ごとのすべての画像ではなく、製品ごとに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の結果が返されますが、SubSELECTからLIMIT0,1を削除すると、すべての製品とすべての画像の完全なリストが表示されます。

製品レコードごとに1つの画像レコードを返したいだけです。


「プログラマー」コードをMySQLに修正しましたが、正常に動作します。

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

何らかの理由で「ビルカーウィン」のソリューションを試してみると、サーバーの読み込みが長時間送信されていました。

4

4 に答える 4

1

これは機能するはずです:

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

選択が返される画像を決定する方法がある場合は、副選択にwhereとおそらくOrderByを追加できます。

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

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

'Top1'を'Limit0,1'に編集および修正しました。

于 2009-05-22T06:28:03.910 に答える
0

MySQLにはここである程度の柔軟性があります。GROUP BYを使用して、結果を製品ごとに1行に制限すると、MySQLが任意の画像を選択します。実際には、データベースに物理的に最初に保存されるのは画像である傾向がありますが、それを制御することはできません。

SELECT p.RefCode, i.ImgPath
FROM Product p INNER JOIN ProductImg i 
  ON (p.PrdID = i.PrdFK)
GROUP BY p.PrdID;

製品ごとに1つの特定の画像が必要な場合は、それを行う方法もあります。それを要件に含める必要があります。:-)

于 2009-05-22T06:28:17.373 に答える
0

Imageテーブルに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
于 2009-05-22T07:06:57.107 に答える
0

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

于 2009-05-22T07:10:01.297 に答える