我经常遇到这样的数据库查询:
获取 userX 的所有条目(例如评论)以及 userX 的朋友的所有条目
假设 userX 不是他自己的朋友,这是在 SQL (MySQL) 中执行此操作的最佳方法。
1. 做两个查询,稍后用 PHP 合并它们
a = SELECT *
FROM comments
WHERE user = X
b = SELECT c.*
FROM comments c
INNER JOIN relation r ON r.user2 = c.user
WHERE r.user1 = X
merge(a, b)
这就是我通常所做的。它相当高效,但我不能将事物用作 ORDER BY 或 LIMIT
2. 带有 IN 和 UNION 的子查询
SELECT c.*
FROM comments
WHERE user IN (
SELECT "X"
UNION
SELECT user2 FROM relation WHERE user1 = X
)
这似乎很慢,因此是个坏主意,不是吗?
3. 其他解决方案?条件连接什么的...