2016-01-26 23 views
-4

我有一个MySQL查询,已离开加入另一个表,并且工作正常。我现在不得不离开另一张桌子。起初这似乎也起作用。 但事情是:我匹配连接的价值在一张表singulary /索引,但在另一张桌上它出现了繁殖。 我在阐明这个问题上很不好,即使这是一个相当简单的设置。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应该算所有的BI的地方MASTER.animal和BI.animal比赛,而不仅仅是第一单中的条目条目。

+0

您是否试图执行您的'php'代码?是否应该有'回声'? – akasummer

+0

左连接按预期工作。见[fiddle](http://sqlfiddle.com/#!9/ce3de/1)。但是您提供的PHP代码无效。它无法运行。 – trincot

+0

不,我很抱歉@akasummer,我的错,我没有提供整个php并简单化了它,所以它会更容易阅读(这是相当详尽的)。 PHP的工作正常,正如我所说,我能够得到我想要的结果 - 除了例外情况,我只得到匹配'joined on'值的第二个表的第一个值。 – sardine

回答

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可以留喜欢它。

+0

WONDERFUL,这正是我正在寻找的!非常感谢你,并感谢你通过我的限制性发言与我一起努力奋斗:D我会尝试一下,然后接受它作为答案! – sardine