【问题标题】:MySQL join tables and get values that have the same key nameMySQL连接表并获取具有相同键名的值
【发布时间】:2016-01-06 09:52:09
【问题描述】:

我正在尝试从一个表中选择所有地址 ID,并从其他表中加入属性。我需要通过 entity_id 连接表 A 和 C 上的值,但是由于表具有相同的键“值”,因此第二个连接正在替换第一个连接的值。

我在这里做错了什么?

    $query = "SELECT 
        A.parent_id,
        B.value,
        C.value
    FROM customer_address_entity AS A
    LEFT JOIN customer_address_entity_varchar AS B 
        ON A.entity_id = B.entity_id
    LEFT JOIN customer_address_entity_text AS C 
        ON A.entity_id = C.entity_id
    LIMIT 100";

    var_dump($query);

但我得到一个 4 的数组。A.value 被 C.value 覆盖

array (size=4)
  'parent_id' => string '7' (length=1)
  'entity_id' => string '6' (length=1)
  'value' => string '19 STANDIFORD CT' (length=16)
  'attribute_id' => string '25' (length=2)

【问题讨论】:

  • “第二个连接正在替换第一个连接的值”是什么意思?
  • 我的意思是我应该有一个 5 而不是 4 的数组,但是因为我从表中选择 ab.value 和 ac.value 我只能在数组中得到一个键“值”,这是有道理的,因为数组中只能有一个唯一键,但是如何更改每个键的名称或获取数据?
  • 好的,我明白了。能否提供获取查询结果的代码?

标签: php mysql join


【解决方案1】:

也许您可以给一列取别名来给它一个唯一的名称?即

$query = "SELECT 
    A.parent_id,
    B.value,
    C.value as Foobar
FROM customer_address_entity AS A
LEFT JOIN customer_address_entity_varchar AS B 
    ON A.entity_id = B.entity_id
LEFT JOIN customer_address_entity_text AS C 
    ON A.entity_id = C.entity_id
LIMIT 100";
...

编辑:可能还有其他方法可以做到这一点,但是查看一些示例数据以及可能用于处理结果的一些代码对我很有帮助。

【讨论】:

  • 谢谢!!正是我需要的!
  • 您能否将别名作为行中的值?例如,我可以将 C.value 别名为 C.title 吗?
  • 信不信由你,我目前没有方便的 MySQL 数据库,但我相信您可以将所需的别名括在引号中以获取表前缀坚持。例如:C.value as "C.title"。但是,重要的是要注意它可能会导致前缀出现在 everything 中,包括生成的 PHP 数组结构中的键。因为前缀通常不会出现在结果结构中,所以我不知道这样做是否有好处。您能否详细说明您要查找的内容?
  • 所以您之前的示例有效,但它让我意识到我现在需要将 B.value 别名为另一个表中的值。这意味着有许多 B 和 C.values 与 A 的 entity_id 匹配,并且所有这些值都需要连接到同一个数组,其对应的匹配标题作为 table_x 中的键。我可以发布另一个问题来更好地说明我想要实现的目标。
  • 这里是新问题stackoverflow.com/questions/34625717/…的链接
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-05
  • 2022-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-24
  • 2016-10-02
相关资源
最近更新 更多