2017-12-26 17 views
0

現在、友人であり、現在のユーザが追跡している投稿のリストを選択しようとしています。しかし、followingテーブルの2番目の文を追加するときに問題に遭遇しています。複数のSELECT文を1つのクエリで使用する

SELECT * FROM login, threads WHERE login.id=threads.poster_id AND deleted=0 AND login.id 
    IN ((SELECT CASE WHEN second_id=? THEN first_id ELSE second_id END FROM friends WHERE first_id=? OR second_id=?) 
    AND (SELECT CASE WHEN follower=? THEN following ELSE follower END FROM following WHERE follower=?)) 
ORDER BY threads.posted DESC LIMIT 20 
+0

"問題"は構文、実行、結果...ですか? – Brien

+0

期待どおりの結果はありませんが、select文の1つが削除されても完全に正常に動作します。 – SecureServer

答えて

2

わずか2つのサブクエリを持つ2つの明示的なIN条件を使用します。

SELECT * 
FROM login 
INNER JOIN threads 
    ON login.id = threads.poster_id 
WHERE 
    deleted = 0 AND 
    (login.id IN (SELECT CASE WHEN second_id=? THEN first_id ELSE second_id END 
        FROM friends WHERE first_id=? OR second_id=?) AND 
    login_id IN (SELECT CASE WHEN follower=? THEN following ELSE follower END 
        FROM following WHERE follower=?)) 
ORDER BY 
    threads.posted 
DESC LIMIT 20; 

これは、構文エラーを修正しても、あなたが期待する出力を与えるが、私はまた、我々のことができるようにことを感じるかもしれませんもう少しクリーンアップしてください。サンプルデータは、その目的のために遠くに行くだろう。

+0

ええ、これはトリックでした - 助けてくれてありがとう! また、クエリをクリーンアップすることをどのようにお勧めしますか?私は、時間の代わりにIDで注文するように変更しました。パフォーマンスには賢明なパフォーマンスが必要です。 – SecureServer

+0

@SecureServer私は、WHERE句のサブクエリを避けるために書き直すことができたかもしれないということを意味しました。 –

+0

ああ、私はあなたが意味するものを参照してください。私は今それが働いているクエリをより最適化しようとしています。 – SecureServer

関連する問題