【问题标题】:MySQL Left Join with fundamentally differently structured tablesMySQL Left Join 与结构完全不同的表
【发布时间】:2016-05-02 20:36:40
【问题描述】:

我有一个 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 应该计算 MASTER.animal 和 BI.animal 匹配的所有 BI 条目,而不仅仅是第一个条目。

【问题讨论】:

  • 您是否尝试执行您的php 代码?应该有echo吗?
  • 左连接按预期工作。见fiddle。但是您提供的 PHP 代码无效。它无法运行。
  • 不,我很抱歉@akasummer,我的错,我没有提供整个 php 并简化了它,所以它更容易阅读(否则它非常详尽)。 php 工作正常,正如我所说,我能够得到我想要的结果 - 除了我只得到与“加入”值匹配的第二个表的第一个值。
  • @trincot 抱歉,这是我的错。我为这篇文章简化了 php,因为它非常广泛。 php 是完全有效的(在原版中) - 我有一个结构问题!如果您好心,请看小提琴,那里描述了我的问题。我如何雕刻查询,以便在一个表中有一个索引值,但在另一个表中有多个对应项。我想要所有的多个对应物,而不仅仅是第一行。
  • 请检查我的小提琴。它表明左连接工作正常。你没有在你的问题中证明你有任何其他结果。请提供实际重现问题的代码。您的小提琴实际上只是三个表格的呈现,但这只是硬编码。如果您像在 PHP 代码中那样执行 SQL,它确实会从左连接表返回多个值。

标签: php mysql sql join


【解决方案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 可以保持原样。

【讨论】:

  • 太棒了,这似乎正是我想要的!!!非常感谢你,感谢你通过我受限的发音与我的挣扎:D 我会尝试一下,然后接受它作为答案!
猜你喜欢
  • 1970-01-01
  • 2012-04-03
  • 1970-01-01
  • 2014-11-15
  • 2017-11-17
  • 2015-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多