MySQL - 在一个查询中从四个表中获取信息

时间:2012-01-15 21:28:39

标签: mysql sql multiple-tables

这是数据结构:

stores          { id, name, city_id, owner_id }
cities          { id, name }
store_managers  { user_id, store_id }
products        { id, name, store_id }
users           { id, name }
_______________________________________
#note: many users can manage the same store, and the same user can manage 
 many stores.

我需要在一个查询中得到:

  1. 用户拥有的商店,我将提供其ID。 [来自商店,当owner_id = some_number]
  2. 对于每个商店,也是附属的城市。 [来自城市]
  3. 拥有商店管理权限的用户。 [来自store_managers]
  4. 分配给每个商店的COUNT个商品。
  5. 我需要它在一个查询中。 DB是MYSQL


    修复后,添加了丢失的外键 我的错,谢谢

1 个答案:

答案 0 :(得分:1)

假设每个商店只附加到一个城市并且您忘记了外键,它可能看起来像这样(我之前学到的MySQL具体):

SELECT s.id, GROUP_CONCAT(u.name SEPARATOR ', ') as users,
COUNT(p.*) AS product_count
FROM stores s
JOIN city c ON s.city_id = c.id
JOIN store_managers sm ON sm.store_id = s.id
JOIN users u ON u.id = sm.user_id
JOIN products p ON p.store_id = s.id
WHERE s.owner_id = ?
GROUP BY s.id

但是,您已经看到将所有内容整合在一起并不好,因为您只能在一个字符串中检索名称,否则您将获得包含相同 store_id 。除非你真的想要连接列表中的名字,否则你必须再次爆炸,这会在名称包含逗号时立即导致问题。如果不进行分组,则必须稍后使用PHP迭代所有行并对其进行操作。有时最好进行两次查询,但这取决于您需要用户名称的方式。

通常,当将大量内容放入单个查询中时,您将在以后遇到问题。在这种情况下,一切都仍然可以管理,但是一旦你想要多次计数它就会变得危险。

仍然可能包含一些错误,只是直接编写而不进行测试。