首页 > 解决方案 > 选择多个列而不进行多个查询 php mysql

问题描述

如何在没有多个查询的情况下连接多个表列?有没有更有效的方法来做到这一点?表 1 和表 2 将有超过 3000 行数据。

表格1

=========================================
ID    Name       skill   skill2   skill3
=========================================
1      Ed           1       4       3    
...
3000  Dave         200     500     345
--------------------------------------

表2

=========================
ID     Skill Name
=========================
1        php
2        html
3        css
4        mysql
...
3000     python
-------------------------

例如

SELECT Table1.usrname,
(SELECT Table2.skillname FROM Table2 WHERE Table1.skill1 = Table2.Id) As skill1,
(SELECT Table2.skillname FROM Table2 WHERE Table1.skill2 = Table2.Id) As skill2,
(SELECT Table2.skillname FROM Table2 WHERE Table1.skill3 = Table2.Id) As skill3
FROM Table1

提前致谢

标签: phpmysqlsqlsubqueryleft-join

解决方案


您使用相关子查询的方法似乎是解决问题的相关方法。为了提高性能,请确保您有一个索引,table2(id, skillname)以便子查询有效执行。

您可能还想尝试多个连接:

select t1.username, t21.skillname skill1, t22.skillname skill2, t23.skillname skill3
from table1 t1
inner join table2 t21 on t21.id = t1.skill1
inner join table2 t22 on t22.id = t1.skill2
inner join table2 t23 on t23.id = t1.skill3

这种方法的一个优点是,如果需要,您可以轻松地从技能表中获取更多列,而不是您使用的内联子查询,它总是返回一个标量值。

如果可能缺少技能,请使用left joins 而不是inner joins。


推荐阅读