1

条件が満たされた場合、特定のレコードのみを取得するにはどうすればよいですか?

私はコードを持っています

"SELECT a.id, a.text, a.uid, a.time 
FROM story a INNER JOIN friends b 
         ON ((a.uid = '" . $uid . "') OR 
             (b.uid = '" . $uid . "' AND accepted='1')  OR 
             (b.fid = '" . $uid . "' AND accepted='1')) 
ORDER BY a.time DESC 
LIMIT 3";

friendsテーブルが空の場合、storyレコードが表示されないことを除いて、正常に機能します。

私が達成したいことは

  • テーブル ストーリーの uid がログイン済みの uid (ユーザー) と等しい場合、テーブルストーリーテキストを表示します(つまり、彼自身のストーリーです)。

  • テーブルストーリーuidがテーブルフレンドのuidと等しく、その友情が受け入れられる場合、またはテーブルストーリーのuidがテーブルフレンドのfidと等しく、その友情が受け入れられる場合、テーブルストーリーのテキストを表示します(ストーリーがフレンドであり、フレンドシップが承認された場合にのみ表示されます)

  • 友情がまったくない場合は、テーブルストーリーから自分のストーリーを表示し、他のストーリーを省略します

4

1 に答える 1

1

適切な結合形式を使用していないと思います。次のようになります。

    SELECT field_name 
    FROM table1 t1 
    INNER JOIN table2 t2 
    ON t1.id = t2.some_id 
    WHERE..

ここで基本を確認できます。

あなたの場合、次のようにクエリを書く必要があります:

    "SELECT a.id, a.text, a.uid, a.time 
    FROM story a INNER JOIN friends b 
    ON a.id = b.some_id WHERE ((a.uid = '" . $uid . "') OR
    (b.uid = '" . $uid . "' AND accepted='1')  OR 
    (b.fid = '" . $uid . "' AND accepted='1')) 
    ORDER BY a.time DESC 
    LIMIT 3";

役立つと思います。

于 2013-01-16T08:09:51.137 に答える