MySQL Left Join加入结构基本不同的表格

时间:2016-01-26 10:00:54

标签: php mysql sql join

我有一个mysql查询,已经离开加入另一个表,并且工作正常。我现在不得不离开加入另一张桌子。起初这似乎也有效。 但问题是:匹配连接的值在一个表中是奇异/索引,但在另一个表中,它会出现倍增。 我很难说清楚这一点,即使这是一个相当简单的设置。

所以我想了解我的意思:https://jsfiddle.net/fesoLvy4/2/

当我现在执行我惯常的左连接例程并将mysql_query放入PHP时:

<?php
echo "  <table>
          <tr>
            <th>Dog</th>
            <th>Species</th>
            <th>Properties</th>
          </tr>";

     while($data = mysql_fetch_row($mysql_leftjoin_query)){
  echo "  <tr>
            <td>$data[0]</td>
            <td>$data[1]</td>
            <td>$data[2]</td>
          </tr>
        </table>"; } 
?>

只有左连接表的第一个条目进入表 - $ data [3]只包含匹配的第二个表的第一个值,但我想要$ data [3]中匹配的所有条目。请看一下这个小提琴,我努力将其写成文字,但我认为这是一个非常简单的设置。 我认为这与php的mysql_fetch_row有关,但我不能指责它。

为了完整性,这是我的MySQL查询(简化):

$mysql_leftjoin_query = mysql_query("SELECT MASTER.animal, MASTER.species, BI.properties

 FROM        `XYZ_MASTER`  MASTER
    LEFT JOIN  `XYZ_BOARD_INFO` BI

        ON (MASTER.animal = BI.animal)");

现在,BI.properties应该计算MAS的所有条目,其中MASTER.animal和BI.animal匹配,而不仅仅是第一个单项。

1 个答案:

答案 0 :(得分:1)

您可能正在寻找group_concat功能:

SELECT     MASTER.animal, MASTER.species, 
           group_concat(BI.properties separator ', ') as Properties
FROM       MASTER
LEFT JOIN  BOARD_INFO BI
       ON (MASTER.animal = BI.animal)
GROUP BY   MASTER.animal, MASTER.species

请参阅此fiddle

SQL的输出是:

+--------+---------+-------------------------------+
| animal | species | properties                    |
+--------+---------+-------------------------------+
| dog    | mammal  | has ears, has a tail, has fir |
| cat    | mammal  | meows, hunts birds            |
| turtle | reptile | (null)                        | 
+--------+---------+-------------------------------+

你的PHP可以保持原样。