【发布时间】:2016-04-28 14:08:53
【问题描述】:
我有这张桌子:
博客
id
name
user_id // author - relational to "users"
用户
id
nickname
avatar
订阅
id
blog_id // relational to "blogs"
user_id // relational to "users"
我们的想法是在网站上显示如下内容:
Blogname
Created By Stack
Suscriptions: Overflow, Easy, Robinson, Porter
我正在从blogs获取所有数据
SELECT
b.id,
b.name,
b.user_id,
u.nickname as user_nickname,
u.avatar as user_avatar
FROM blogs b
LEFT JOIN users u ON b.user_id = u.id
使用 PHP,我创建了一个包含所有 blogs ID 的数组,因此我可以将它们与 IN 运算符一起使用,如下所示:
SELECT
s.id,
s.blog_id,
u.nickname,
u.avatar
FROM suscriptions s
LEFT JOIN users u ON s.user_id = u.id
WHERE s.blog_id IN (1, 2, 3)
然后再用 PHP 对结果进行排序。
但是,有没有更好的方法?我在考虑只使用 MySQL 而不是 PHP。也许在一次查询中获取所有数据?或者最好的方法是什么?
请务必记住,blog 可以有多个 subscriptions。
我发现 2012 年的这个问题有点相似:JOIN three tables and aggregate data from multiple rows for every DISTINCT row in separate column 但是OP说它真的很慢,所以我现在有点迷茫。
【问题讨论】:
-
你用的是核心php还是一些框架?
-
@SulthanAllaudeen 仅用于数据库处理的 PDO