从两个表中提取

时间:2012-11-13 23:52:45

标签: php android mysql api

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

第一张表是产品清单

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

1 个答案:

答案 0 :(得分: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