【问题标题】:Grab data from multiple tables using Left Outer Join - PDO使用左外连接从多个表中获取数据 - PDO
【发布时间】:2014-12-07 18:33:27
【问题描述】:

我正在尝试使用 LEFT OUTER JOIN 连接到 3 个表。我不确定我这样做是否正确。

表格包括:费率、国家和服务类型

查询:

$sql = "SELECT rates.rate_id, rates.initial_change, service_types.service, countries.country 
FROM rates 
LEFT OUTER JOIN service_types ON rates.service_id = service_types.serviceType_id 
LEFT OUTER JOIN countries ON rates.from_id = country.country_id 
LEFT OUTER JOIN countries ON rates.to_id = country.country_id 
ORDER BY service_types.serviceType_id ASC";
$statement = $con_db->exec($sql);
$result = $statement->fetchAll();//error points to this line

这是错误信息:

致命错误:在

中的非对象上调用成员函数 fetchAll()

【问题讨论】:

  • 错误指向的行,可能不是问题 - 我认为它抛出了一个错误,因为 $result 由于 $con_db->e​​xec($sql); 为空不返回任何东西。你为什么使用 exec(),而不是 query()?假设您使用 mysqli 对象连接到您的数据库。
  • @JonStory 谢谢。我正在使用 pdo
  • 啊,当然,当您在问题标题中以大写字母“PDO”时,我没有发现任何线索:p - 我仍然会尝试使用更简单的查询(您知道的是返回结果)。如果这有效,只是您的查询没有返回任何内容 - 为什么要使用左外连接,您实际上想用这个查询做什么?
  • @JonStory 我指的是countriesservice_types 表,通过将它们的ID 与rates 表上的ID 连接起来来获取国家名称和服务名称。然后将它们与rates 表上的其他数据一起传递。

标签: php mysql pdo inner-join outer-join


【解决方案1】:

我注意到的一件事是您访问表格的方式不正确。我猜 SQL 是无效的,它从exec 返回 null。尝试将您的查询更改为:

$sql = "SELECT rates.rate_id, rates.initial_change, service_types.service, countries1.country, countries2.country 
FROM rates 
LEFT OUTER JOIN service_types ON rates.service_id = service_types.serviceType_id 
LEFT OUTER JOIN countries as countries1 ON rates.from_id = countries1.country_id 
LEFT OUTER JOIN countries as countries2 ON rates.to_id = countries2.country_id 
ORDER BY service_types.serviceType_id ASC";

请注意,国家/地区在加入条件中更改为国家/地区1 和国家/地区2,以及选择中的列。

【讨论】:

  • 糟糕,我犯了一个错误。查看带有别名的更新版本。基本上,如果您两次加入同一个表,则必须为表起别名,否则仅引用 countries,您将不知道您指的是哪一个。
猜你喜欢
  • 2012-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-23
相关资源
最近更新 更多