【问题标题】:PHP + mysql - left join - three tablesPHP + mysql - 左连接 - 三张表
【发布时间】:2016-07-02 18:23:35
【问题描述】:

我有一个奇怪的问题。我有三张桌子: - 带有列(id、product_id、customer_id、位置、电话)的 table_a - 带有列的 table_b(id、product_id、product_name) - 带有列(id、customer_id、customer_name)的 table_c

我想显示的是一个包含以下内容的表格: table_a.id、product_name、customer_name、位置、电话

所以我假设我应该以某种方式使用左连接 table_b、table_c 和 table_a。

我尝试了多种方法,例如:

SELECT*FROM table_a INNER JOIN table_b, table_c
ON table_a.product_id = table_b.product_id
ON table_a.customer_id = table_c.customer_id

我想避免在决赛桌中重复 product_id/customer_id..

【问题讨论】:

    标签: php mysql left-join


    【解决方案1】:

    您需要依次连接 table_a 和 table_b 以获得 product_name,然后连接 table_a 和 table_c 以获得 customer_name。你可以试试这个:

    SELECT table_a.id, product_name, customer_name, location, phone
    FROM table_a 
        INNER JOIN table_b ON table_a.product_id = table_b.product_id
        INNER JOIN table_c ON table_a.customer_id = table_c.customer_id
    

    【讨论】:

      【解决方案2】:

      在选择语句中在表属性之前指定表名会有所帮助。希望这会有所帮助!

      select
          table_a.id,
          table_b.product_name,
          table_c.customer_name,
          table_a.location,
          table_a.phone
      from table_a
      left join table_b
          on table_a.product_id = table_b.product_id
      left join table_c
          on table_a.customer_id = table_c.customer_id
      

      【讨论】:

      • 您知道任何可以使用 PDO 显示大量数据的特定 PHP 类或脚本吗?每次我这样做时,我都会收到 500 错误。更奇怪的是 - 我的代码:codepad.org/7HGBxmkq 在 phpmyadmin 中使用 - 创建一个包含重复字段的表..例如我的 ID #1 行被复制了大约 150 次?
      • 我的大部分项目都使用 Laravel,所以主要使用 eloquent 进行任何数据库交互 - 我相信它使用 PDO。 laravel.com/docs/5.2/eloquent 如果您收到 500 错误,可能是因为超时,请尝试将您的查询限制为 10 行以查看它是否有效,如果它确实更改了您的 php 设置以允许您的查询执行超过 30 秒.在任何情况下,您都可能需要考虑对结果进行分页,而不是在屏幕上显示大量数据。
      • 如果您在其他查询中遇到其他问题,最好再问一个问题
      【解决方案3】:

      您可以获取所有其他字段,但您要获取哪个 id?所有 3 个表都有 id 字段。

      假设您可以获取第一个表的 id:

      SELECT table_a.id, table_b.product_name as product_name, table_c.customer_name as customer_name, table_a.location as location, table_a.phone as phone
      
      FROM table_a INNER JOIN table_b
      
      ON table_a.product_id = table_b.product_id
      
      INNER JOIN table_c
      
      ON table_a.customer_id = table_c.customer_id
      

      希望这会有所帮助。

      和平! xD

      【讨论】:

      • 这很奇怪。我已经使用了你的方案 - 这是查询:codepad.org/Z7HY5LEn 但是当我通过 phpmyadmin 尝试这个查询时,我得到 1064 错误 - 它指出最后三行有一个错误。这是为什么呢?
      猜你喜欢
      • 2014-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-03
      • 2018-11-06
      • 1970-01-01
      相关资源
      最近更新 更多