Php 从多个没有左联接的表中选择
我正试图从50个表中选择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| |
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
有趣的方法。也会帮助我。