选择多个列而不进行多个查询 php mysql

Posted

技术标签:

【中文标题】选择多个列而不进行多个查询 php mysql【英文标题】:Select multiple columns without multiple queries php mysql 【发布时间】:2020-09-19 20:59:05 【问题描述】:

如何在没有多个查询的情况下连接多个表列? 有没有更有效的方法来做到这一点? 表 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

提前致谢

【问题讨论】:

你的方法没问题。 【参考方案1】:

您使用相关子查询的方法似乎是解决问题的相关方法。为提高性能,请确保您在 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。

【讨论】:

以上是关于选择多个列而不进行多个查询 php mysql的主要内容,如果未能解决你的问题,请参考以下文章

如何正确使用连接/子查询从多个表中选择数据? (PHP-MySQL)

如何使用多个查询字符串加载内容而不刷新

添加列而不添加 GROUP BY,而不是嵌套查询

如何混合 COUNT() 和非 COUNT() 列而不丢失查询中的信息?

Bigquery - 选择一列而不将它们分组在按子句中

PHP/PDO/MySQL:将多个查询转换为单个查询