1

使用しているテーブルの例が2つあります。出力を使用して配列を構築しているため、出力は単一の列である必要があります。

最初の表は製品のリストです

    PRODUCT ID    PRODUCT_NAME
    01            product1
    02            product2
    03            product3
    04            product4
    05            product5
    06            product6
    07            product7
    08            product8
    09            product9
    10            product10
    11            product11
    12            product12

表2は購入のリストです

    SALESID       PRODUCT_NAME       USERID       DATE
    01            product1           001ABC       11-10-2012
    02            product5           001ABC       11-11-2012
    03            product1           002XYZ       11-11-2012
    04            product12          001ABC       11-13-2012
    05            product7           001ABC       11-13-2012
    06            product3           002XYZ       11-14-2012
    07            product11          002XYZ       11-14-2012

ここで必要なのは、001ABCのようなUSERIDを指定する場合、USERIDが指定したものと一致し、(自動的に)製品テーブルに表示され、0を表示する必要がある場合は出力を1にする必要があります。製品テーブルに表示されるだけです

したがって、上記の2つのテーブルとこれらの2つのUSERIDの2つの例は、次のようになります。

USERID001ABCが提供する利回り

  OUTPUT
  1
  0
  0
  0
  1
  0
  1
  0
  0
  0
  0
  1

USERID002XYZが提供する

  OUTPUT
  1
  0
  1
  0
  0
  0
  0
  0
  0
  0
  1
  0

CASEステートメントの使用が失敗したか、正しい構文が得られませんでしたPHPとMYSQLを使用しています

現在のクエリは、単一のUSERIDがある限り正常に機能しましたが、userIDでフィルタリングしようとすると失敗しました。

PHP / MYSQLクエリ:

    SELECT (PURCHASES.PRODUCT_NAME IS NOT NULL) AS purchased 
    FROM PRODUCTS 
      LEFT JOIN PURCHASES 
      ON PRODUCT_NAME = PRODUCT_NAME ORDER BY 1

何が間違っているのかわかりません。

2回購入して別のユーザーを追加すると、結果は出力にさらに2行追加されたように見えたため、出力には、表示した例のように元の12行ではなく14行が含まれていました。

製品名で識別される購入テーブルで一致が見つかった場合を除いて、各行がゼロに設定された製品の合計量に等しいレコードの合計量で単一列の出力を取得するにはどうすればよいですか?出力。

4

1 に答える 1

4

必要なクエリは次のとおりです。製品 ID で結果を並べ替える必要があります。出力列の 0/1 値でそれらを並べ替えているため、もちろんその列の有用性が失われます。

また、特定の製品の購入があったかどうかを把握するために、フィルター処理された購入テーブルで集計を行う必要があります。それがサブクエリ「b」です。

最後に、製品ごとに出力結果セットに 1 つの行が必要であるため、製品から購入への結合を残しました。

     select ifnull(b.number>0,0) output
       from products a
  left join (
              select count(*) number,
                     product_name
                from purchases
               where userid = '001ABC'
            group by product_name
           ) b on a.product_name = b.product_name
  order by a.product_id

たとえば、この SQL Fiddle を参照してください。http://sqlfiddle.com/#!2/6e985/12/0

于 2012-11-14T00:25:45.617 に答える