繁体   English   中英

如何在有条件的情况下计算第二张表中的外键数量并在第一张表中的行中显示它-PHP-MySQL

[英]How to calculate number of foreign keys in second table with a condition and display it with rows from first table - PHP - MySQL?

我有两个表tableatableb如下;

桌子

+--------+-------+-------+-------+------+
|   fa   |   fb  |  fc   |  fd   |  fe  |
+--------+-------+-------+-------+------+
|  col1  |  f11  |  f12  |  f13  |  x1  |
+--------+-------+-------+-------+------+
|  col2  |  f21  |  f22  |  f23  |  x2  |
+--------+-------+-------+-------+------+
|  col3  |  f31  |  f32  |  f33  |  x3  |
+--------+-------+-------+-------+------+
|  col4  |  f41  |  f42  |  f43  |  x4  |
+--------+-------+-------+-------+------+

桌子

+--------+-------+-------+------+------+
|  tbba  |  tbbb |  tbbc | tbbd | tbbe |
+--------+-------+-------+------+------+
|  cola  |  fa1  |  fa2  |  0   |  x1  |
+--------+-------+-------+------+------+
|  colb  |  fb1  |  fb2  |  0   |  x1  |
+--------+-------+-------+------+------+
|  colc  |  fc1  |  fc2  |  1   |  x1  |
+--------+-------+-------+------+------+
|  cold  |  fd1  |  fd2  |  1   |  x2  |
+--------+-------+-------+------+------+
|  cole  |  fe1  |  fe2  |  1   |  x2  |
+--------+-------+-------+------+------+
|  colf  |  ff1  |  ff2  |  0   |  x3  |
+--------+-------+-------+------+------+
|  colg  |  fg1  |  fg2  |  1   |  x3  |
+--------+-------+-------+------+------+
|  colh  |  fh1  |  fh2  |  1   |  x3  |
+--------+-------+-------+------+------+
|  coli  |  fi1  |  fi2  |  0   |  x3  |
+--------+-------+-------+------+------+
|  colj  |  fj1  |  fj2  |  0   |  x4  |
+--------+-------+-------+------+------+

我想生成一个表

+--------+-------+-----+
|  col1  |  f11  |  1  |
+--------+-------+-----+
|  col2  |  f21  |  2  |
+--------+-------+-----+
|  col3  |  f31  |  2  |
+--------+-------+-----+
|  col4  |  f41  |  0  |
+--------+-------+-----+

这是tableb tableb.tbbe中tablea tablea.fe中外键的数目,并且tableb.tbbd字段的值为1 我有一个类似的查询;

SELECT a.fa , a.fb , COUNT( b.tbbe) 
FROM  tablea a
LEFT JOIN tableb b ON a.fe = b.tbbe
GROUP BY a.fa

但这会计算所有外键,而不检查tableb.tbbd字段的状态。 如何创建此表?

您可以在此处引用我的另一个问题。一种有效的方法来计算第二个表中的外键数量,并与第一个表中的行一起显示它-PHP-MySQL

谢谢。

如果b.tbbd仅是0或1,则可以使用SUM()而不是COUNT()来排除tbbd = 0的行。

SELECT a.fa , a.fb , SUM( b.tbbe) 
FROM  tablea a
LEFT JOIN tableb b ON a.fe = b.tbbe
GROUP BY a.fa

如果b.tbbd可以是任何数字,但你只是寻找它然后等于1的行只需要加一个ANDON子句

SELECT a.fa , a.fb , COUNT( b.tbbe) 
FROM  tablea a
LEFT JOIN tableb b ON a.fe = b.tbbe AND b.tbbd = 1
GROUP BY a.fa

查询中的错误很简单,就是您永远不会在b.tbbd = 1的情况下也不会添加条件。 您可以这样添加它:

SELECT a.fa, a.fb, COUNT(b.tbbe)
FROM tablea a
LEFT JOIN tableb b ON a.fe = b.tbbe AND b.tbbd = 1
GROUP BY a.fa, a.fb;

这是一个SQL Fiddle示例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM