Php 从两个表中提取

Php 从两个表中提取,php,android,mysql,api,Php,Android,Mysql,Api,我有两个我正在使用的表格示例 我使用输出来构建数组,因此我的输出需要是一列 第一个表是产品列表 PRODUCT ID PRODUCT_NAME 01 product1 02 product2 03 product3 04 product4 05 product5 06 product6 07

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

第一个表是产品列表

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

上面两个表和这两个用户ID的两个示例如下所示

用户ID 001ABC已提供 屈服

已提供用户标识002XYZ 屈服

使用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。

这是您想要的查询。您需要按产品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小提琴

这是您想要的查询。您需要按产品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小提琴

非常感谢你,这正是我所希望的,更好的是,有了你的解释,我真的明白了!!!再次感谢。非常感谢。这正是我所希望的,更好的是,有了你的解释,我明白了!!!再次感谢。
     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