PHP / MySQL - 在数组中组合两个表

时间:2013-05-24 09:39:58

标签: php mysql

SQL Noob在这里。我的桌子是这样的:

主表

+-----------+-------------+
| talent_id | talent_name |
+-----------+-------------+
|         1 | Talent1     |
|         2 | Talent2     |
|         3 | Talent3     |
+-----------+-------------+

教育表

+-----------+-----------+-----------------------------+
| talent_id |   level   |           course            |
+-----------+-----------+-----------------------------+
|         1 | Post-Grad | Master in Something         |
|         1 | Post-Grad | Doctor in Something         |
|         1 | College   | BS Something Engineering    |
|         2 | College   | BS Something Science        |
|         2 | Post-Grad | Master in Something Science |
|         3 | College   | BS Computer Something       |
+-----------+-----------+-----------------------------+

是否可以在一个查询中组合两个表中的列?我尝试了单独的查询(顺便说一下,这是有效的),但是我很难将这两个查询组合在一个数组中。如果只是因为拥有单独的查询是更好的解决方案,你们可以给我一个想法如何迭代两个数组结果并将它组合成这样的东西:

Array( [0] => Array(
             'talent_id' => '1', 
             'talent_name' => 'Talent1', 
             'course' => Array('Master in something', 'Doctor in something', 'BS Something')),
       [1] => Array('talent_id' => '2', ...) )
自从实习开始以来,Stack Overflow对我来说是一个很大的帮助。我要感谢你们所有人。

5 个答案:

答案 0 :(得分:3)

您应该在查询中使用左连接:

SELECT m.talent_id,m.talent_name,e.level,e.course
FROM main AS m 
LEFT JOIN education AS e ON m.talent_id =  e.talent_id

答案 1 :(得分:0)

首先,你选择你的才能(用他们的id索引)和你的教育。在这里,我会认为你只做了2次查询。 然后

foreach ($educations as $education) {
  $talents[$talent_id]['course'][] = $education;
}

你也可以从LEFT JOIN开始,但是当你有多个级别时,这种水化会很快变得混乱,我不会推荐它。

答案 2 :(得分:0)

有很多选择

我经常使用:

SELECT talent.talent_id, talent.talent_name, education.course FROM talent, education WHERE education.talent_id = education.course

如果教育对于一个人才没有购物的人才是空的,就会垮台。然后你需要使用join

答案 3 :(得分:0)

您通常会使用加入

select * from main left join education using (talentid)

答案 4 :(得分:0)

您可以使用FULL OUTER JOIN来实现这一目标。  FULL OUTER JOIN结合了左外连接和右外连接的结果,并返回表格两侧表格中的所有(匹配或不匹配)行。

SELECT [COL-1], [COL-2] [, ... COL-N]
FROM [TABLE-1]
FULL OUTER JOIN [TABLE-2] ON [TABLE-1].[COLUMN NAME 1] = [TABLE 2].[COLUMN NAME 2]