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。你用哪一个