私はしばしば、次のような db クエリに直面します。
userX のすべてのエントリ (コメントなど) と、userX の友人のすべてのエントリを取得します
userX が自分の友人ではないと仮定すると、これは SQL (MySQL) でこれを行うための最良の方法です。
1. 2 つのクエリを作成し、後で 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. その他の解決策は? 条件付き結合か何か...