【问题标题】:How can I get all field values from a query with JOINed tables?如何从带有 JOINed 表的查询中获取所有字段值?
【发布时间】:2009-09-29 22:26:36
【问题描述】:

我有这个基本的查询:

SELECT d.description, o.code FROM order_positions AS o
LEFT JOIN article_descriptions AS d ON (o.article_id = d.article_id)
WHERE o.order_id = 1

我正在使用来自PEARMDB2 来执行它并读取返回值。

但不知何故,结果数组总是包含来自order_positions!的字段,即结果数组看起来像这样

row[code] = 'abc123'

虽然我希望它看起来像这样

row[description] = 'my description'
row[code] = 'abc123'

我已经尝试了以下方法:

  • 改变字段的顺序,即先code,然后description
  • 改变连接表的顺序。
  • 使用完整的表名而不是别名。
  • 改用“MySQL 连接” (SELECT FROM table1, table2 WHERE table1.id = table2.id)
  • 使用带有和不带有AS 的别名。

其他一些事实:

  • 在 MySQL 查询浏览器中执行此查询工作正常,返回所有字段。
  • 无论如何,order_positions 表似乎是首选。加入其他表时,我仍然只能从该表中获取字段。

【问题讨论】:

    标签: php pear mdb2


    【解决方案1】:

    好的,我找到原因了:

    具有 NULL 值的字段不会添加到数组中。在我的测试场景中,description 实际上是 null,因此在数组中不可用。

    我仍然会保留这个(尴尬的)问题,以防其他人将来遇到这个问题。

    Facepalm http://www.scienceblogs.de/frischer-wind/picard-facepalm-thumb-512x409.jpg

    【讨论】:

      【解决方案2】:

      这应该可行:

      SELECT d.description, o.code 
      FROM order_positions o, article_descriptions d 
      WHERE o.order_id = 1 AND d.article_id = o.article_id
      

      【讨论】:

        【解决方案3】:

        您确定您没有错误地使用fetchOne() 而不是fetchRow()

        你能发布你的 PHP 代码吗?

        另一种可能是您的代码中缺少逗号:

        SELECT a b
        

        相同
        SELECT a AS b
        

        【讨论】:

        • 不,我正在使用 fetchRow。缺少逗号不会导致语法错误吗?我也检查了有无 AS,都一样。
        猜你喜欢
        • 1970-01-01
        • 2018-05-13
        • 2013-08-29
        • 2018-06-24
        • 1970-01-01
        • 2018-12-17
        • 1970-01-01
        • 2018-10-07
        • 1970-01-01
        相关资源
        最近更新 更多