Php 来自多个表的Complexe sql查询
我的查询有问题: 因此,我有一个表调用供应商:Php 来自多个表的Complexe sql查询,php,mysql,sql,Php,Mysql,Sql,我的查询有问题: 因此,我有一个表调用供应商: ref_article supplier_id 1903 10 我还有另一份叫桌礼物: id_gift etat id_adresse ref_article 100455 3 1 1903 100456 3 2 1903 100457
ref_article supplier_id
1903 10
我还有另一份叫桌礼物:
id_gift etat id_adresse ref_article
100455 3 1 1903
100456 3 2 1903
100457 3 3 1903
我还有桌上的礼物(地址):
id name surname
1 jkkjl hkj
2 hjhjk jklj
3 kjkj hjjkhk
我的问题是这样的:
SELECT
supp.ref_article,
COUNT(g.id_instant_gagnant) AS gifts_number
FROM supplier supp
LEFT JOIN gift g ON supp.ref_article = g.ref_article
INNER JOIN gift_adresse g_adr ON g.id_adresse = g_adr.id_adresse
WHERE supp.supplier_id = 10 AND g_ig.etat = 3
GROUP BY g.ref_article
对于此查询,我得到:
ref_article gifts_number
1903 3
问题是,我想为我的示例100455100456100457获得这篇参考文章的所有id\u礼物
是否可以在单个查询中执行此操作?您可以用于所需的CSV输出
MySQL解决方案:
SELECT
supp.ref_article
, COUNT(g.id_instant_gagnant) AS gifts_number
, GROUP_CONCAT(g.id_gift) AS gift_ids
FROM supplier supp
LEFT JOIN gift g ON supp.ref_article = g.ref_article
INNER JOIN gift_adresse g_adr ON g.id_adresse = g_adr.id_adresse
WHERE supp.supplier_id = 10
AND g_ig.etat = 3
GROUP BY g.ref_article
直接问题的答案是group\u concat()
。但是,您的查询相当尴尬:
SELECT supp.ref_article,
COUNT(g.id_instant_gagnant) AS gifts_number
FROM supplier supp LEFT JOIN
-------------------^ LEFT JOIN is turned to inner join
gift g
ON supp.ref_article = g.ref_article INNER JOIN
gift_adresse g_adr
ON g.id_adresse = g_adr.id_adresse
--------^ by this expression here
WHERE supp.supplier_id = 10 AND g_ig.etat = 3
--------------------------------^ I don't know what this is
GROUP BY g.ref_article
---------^ Don't aggregate by a `LEFT JOIN`ed table unless you want `NULL` values *AND* this is not the expression in the `FROM`
我建议取消左联接
,修复表中的引用,并删除第三个表:
SELECT supp.ref_article,
COUNT(g.id_instant_gagnant) AS gifts_number,
GROUP_CONCAT(g.id_gift) as gifts
FROM supplier supp JOIN
gift g
ON supp.ref_article = g.ref_article and g.etat = 3
WHERE supp.supplier_id = 10
GROUP BY supp.ref_article
如果您想要一个左联接
,现在可以将其添加回。etat
上的条件在on
子句中,它需要在那里。mysql sql server。你用哪一个