[英]Efficient way to calculate number of foreign keys in second table and display it with rows from first table - 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?
我有两个表tablea
和tableb
如下;
桌子
+--------+-------+-------+-------+------+
| 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的行只需要加一个AND
你ON
子句
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.