我有一个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匹配,而不仅仅是第一个单项。
答案 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可以保持原样。