0

ページに複数の製品をリストしようとしています。私のクエリは同じ製品の倍数を返します。クエリだけでそれを 1 つに制限する方法を見つけようとしています。

table_one と呼ぶ最初のテーブルの主キーは ID です。2 番目のテーブルには、table_one の主キーを参照する ProductID の列があります。

私のクエリは、下記の 6 に等しい私の ProductID の倍数を返します。私は 1 つの結果を取り戻したいだけですが、table_two の DateReserved にあるすべてのデータを照会する必要があります。クエリにもう 1 つ追加する必要があることは確かですが、うまくいきませんでした。

私が返したい結果は次のとおりです。

ID   Productname  Quantity              Image       Date Reserved         SumQuantity

6    productOne          6        'image.jpg'          03-31-2013                   3           
7    productTwo          1      'product.jpg'          04-04-2013                   1  

これが私の最初のテーブルです。table_one

ID   Productname  Quantity              Image

6    productOne          6        'image.jpg'                 
7    productTwo          1      'product.jpg'

これが私の2番目のテーブルです。table_two

ID     ProductID       DateReserved  QuantityReserved

1             6          03-31-2013                 3                 
2             6          04-07-2013                 2
3             7          04-04-2013                 1

これが私が使用しようとしているクエリです。

SELECT * 
FROM `table_one` 
LEFT JOIN `table_two` 
       ON `table_one`.`ID` = `table_two`.`ProductID` 
WHERE `table_one`.`Quantity` > 0  
      OR `table_two`.`DateReserved` + INTERVAL 5 DAY <= '2013-03-27' 
ORDER BY ProductName
4

3 に答える 3

1

別の回答を投稿して申し訳ありませんが、私の最初の試みはあまり良くなかったようです;)

予約ごとに 1 つの結果行のみを取得するには、何らかの方法でそれらを合計する必要があります。最初に、結果に戻す列を明示的に選択し、「*」は使用しないことをお勧めします。

次のようなことを試してみることをお勧めします。

SELECT
        `table_one`.`ID`, `table_one`.`Productname`, `table_one`.`Image`, `table_one`.`Quantity`,
        `table_two`.`ProductID`, SUM(`table_two`.`QuantityReserved`)
    FROM
        `table_one` 
    LEFT JOIN
        `table_two` ON `table_one`.`ID` = `table_two`.`ProductID` 
    WHERE
        `table_one`.`Quantity` > 0  
        OR `table_two`.`DateReserved` + INTERVAL 5 DAY <= '2013-03-27'
    GROUP BY `table_two`.`ProductID`
    ORDER BY ProductName

ご覧のとおり、"SUM" を使用して合計数量を取得しました。これは集計と呼ばれ、"GROUP BY" は、同じ ProductID の複数の発生を取り除くのに役立ちます。

現在抱えている問題の 1 つは、別のクエリから予約日を取得する必要があることです (少なくとも、同じクエリで予約日を取得する方法がわかりません)。

于 2013-03-20T16:18:49.953 に答える
0

MySQLを使用しているので

LIMIT <NUMBER>

必要なことを正確に実行する必要があります。ORDERBY句の後に挿入するだけですが、おそらくそれにもう1つ順序を追加する必要があります。そうすれば、一部のエンティティだけでなく、常に必要な1つのエンティティを取得できるようになります。ランダムな"エンティティ;)

したがって、さらに順序付けしないと、クエリは次のようになります。

SELECT
    *
FROM `table_one` 
LEFT JOIN `table_two` ON `table_one`.`ID` = `table_two`.`ProductID` 
WHERE
    `table_one`.`Quantity` > 0
    OR `table_two`.`DateReserved` +  INTERVAL 5 DAY <= '2013-03-27'
ORDER BY ProductName
LIMIT 1

ここにそれについてのもう少しの説明

于 2013-03-20T15:36:18.367 に答える