1

我有两个正在使用的表示例 我正在使用输出来构建数组,所以我的输出需要是单列

第一个表是产品列表

    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

表二是采购清单

    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,我需要输出为 1,如果 USERID 与我提供的匹配并且(它应该自动)它出现在产品表中并且我需要它显示 0 如果它只出现在产品表中

所以上面两个表的两个例子和这两个 USERID 看起来像这样

USERID 001ABC 提供的产量

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

USERID 002XYZ 提供的产量

  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

我不确定我做错了什么。

当我添加另一个购买两次的用户时,结果似乎只是在输出中添加了两行,因此输出将有 14 行,而不是我展示的示例中的原始 12 行。

我怎样才能获得单列输出,其记录总数等于每行设置为零的产品总数,除非在由产品名称标识的购买表中找到匹配项,然后在 1 中而不是零输出。

4

1 回答 1

4

这是您想要的查询。您需要按产品 ID 对结果进行排序;您按输出列中的 0/1 值对它们进行排序,这当然会破坏该列的有用性。

您还需要对过滤后的购买表进行汇总,以确定是否有任何特定产品的购买。那是子查询“b”。

最后,您离开了从产品到购买的连接,因为您希望每个产品的输出结果集中只有一行。

     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 回答