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