Php 从多个没有左联接的表中选择

Php 从多个没有左联接的表中选择,php,sql,select,Php,Sql,Select,我正试图从50个表中选择id,其中FIND\u IN\u SET。是否有一种方法可以使用除左连接以外的其他方法?我只给了3张桌子,因为50张不合适 注意:每个表中都有关于教育的列 下面的代码无法工作,那么我还需要做些什么来避免代码中出现上千行 nose_1 |id|class|about_education| | 1| 1| a01| | 2| 0| a02| coins_2 |id|class|about_education| |

我正试图从50个表中选择
id
,其中
FIND\u IN\u SET
。是否有一种方法可以使用除左连接以外的其他方法?我只给了3张桌子,因为50张不合适

注意:每个表中都有关于教育的

下面的代码无法工作,那么我还需要做些什么来避免代码中出现上千行

nose_1

|id|class|about_education|
| 1|    1|            a01|
| 2|    0|            a02|


coins_2

|id|class|about_education|
| 1|    1|            a01|
| 2|    0|            a02|


money_3

|id|class|about_education|
| 1|    1|            a01|
| 2|    1|            a10|


SELECT COUNT(id) AS id FROM nose_1, coins_2, money_3 WHERE class=1 AND FIND_IN_SET('a01', about_education)");
SELECT COUNT(id) AS id FROM nose_1, coins_2, money_3 WHERE class=1 AND FIND_IN_SET('a02', about_education)");
SELECT COUNT(id) AS id FROM nose_1, coins_2, money_3 WHERE class=1 AND FIND_IN_SET('a02', about_education)");
SELECT COUNT(id) AS id FROM nose_1, coins_2, money_3 WHERE class=1 AND FIND_IN_SET('a03', about_education)");
SELECT COUNT(id) AS id FROM nose_1, coins_2, money_3 WHERE class=1 AND FIND_IN_SET('a04', about_education)");
SELECT COUNT(id) AS id FROM nose_1, coins_2, money_3 WHERE class=1 AND FIND_IN_SET('a05', about_education)");
SELECT COUNT(id) AS id FROM nose_1, coins_2, money_3 WHERE class=1 AND FIND_IN_SET('a06', about_education)");
SELECT COUNT(id) AS id FROM nose_1, coins_2, money_3 WHERE class=1 AND FIND_IN_SET('a07', about_education)");
SELECT COUNT(id) AS id FROM nose_1, coins_2, money_3 WHERE class=1 AND FIND_IN_SET('a08', about_education)");
SELECT COUNT(id) AS id FROM nose_1, coins_2, money_3 WHERE class=1 AND FIND_IN_SET('a09', about_education)");
SELECT COUNT(id) AS id FROM nose_1, coins_2, money_3 WHERE class=1 AND FIND_IN_SET('a10', about_education)");

输出:3,0,0,0,0,0,0,0,0,1

您需要编写一个子查询
UNION ALL
ALL表格,然后
count
函数使用
CASE,当
您可以从ID获取计数时

SELECT 
     COUNT(CASE WHEN about_education = 'a01' and class = 1 then 1 else null end) a01,
     COUNT(CASE WHEN about_education = 'a02' and class = 1 then 1 else null end) a02, 
     COUNT(CASE WHEN about_education = 'a03' and class = 1 then 1 else null end) a03, 
     COUNT(CASE WHEN about_education = 'a04' and class = 1 then 1 else null end) a04, 
     COUNT(CASE WHEN about_education = 'a05' and class = 1 then 1 else null end) a05, 
     COUNT(CASE WHEN about_education = 'a06' and class = 1 then 1 else null end) a06, 
     COUNT(CASE WHEN about_education = 'a07' and class = 1 then 1 else null end) a07, 
     COUNT(CASE WHEN about_education = 'a08' and class = 1 then 1 else null end) a08, 
     COUNT(CASE WHEN about_education = 'a09' and class = 1 then 1 else null end) a09,
     COUNT(CASE WHEN about_education = 'a10' and class = 1 then 1 else null end) a10
FROM 
(
  SELECT id,class,about_education from nose_1
  UNION ALL
  SELECT id,class,about_education FROM coins_2
  UNION ALL
  SELECT id,class,about_education FROM money_3
) t
sqlfiddle:

结果

| a01 | a02 | a03 | a04 | a05 | a06 | a07 | a08 | a09 | a10 |
|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|
|   3 |   0 |   0 |   0 |   0 |   0 |   0 |   0 |   0 |   1 |

union all
是正确的方法,但我认为我建议定期聚合,除非您真的想要列中的值:

select about_education, count(*)
from (select id, class, about_education from nose_1
      union all
      select id, class, about_education from coins_2
      union all
      select id, class, about_education from money_3
     ) t
where class = 1
group by about_education;

在你的例子中,左join在哪里?有交叉连接,笛卡尔乘法。你能提供一些样本数据并期望结果吗?@D-Shih现在检查一下。你需要
union
有趣的方法。也会帮助我。