这是数据结构:
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.
我需要在一个查询中得到:
我需要它在一个查询中。 DB是MYSQL
修复后,添加了丢失的外键 我的错,谢谢
答案 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迭代所有行并对其进行操作。有时最好进行两次查询,但这取决于您需要用户名称的方式。
通常,当将大量内容放入单个查询中时,您将在以后遇到问题。在这种情况下,一切都仍然可以管理,但是一旦你想要多次计数它就会变得危险。
仍然可能包含一些错误,只是直接编写而不进行测试。