2

ただし、フレンドポストが完了するとすぐに、私が持っているクエリは正常に機能しています。ユーザーに友達がいない場合、結果は返されません。それが私がコツをつかもうとしているものです...

    $query = "SELECT DISTINCT m.id, p.byuser, p.`newpost`, p.`id`, p.`postdate`
    FROM users m
    JOIN pinnwand p 
      ON m.id = p.byuser
    JOIN friends f 
      ON f.`userid` = m.id OR f.`friendid` = m.id
    WHERE (f.`userid` = $myId OR f.`friendid`= $myId)
      AND (p.`touser` = p.`byuser` OR p.`touser` = $myId)
      AND p.`publicp` < 3 
      AND p.`typ` = 2
    ORDER BY p.id DESC LIMIT $limit, 10";

誰かが私を助けてくれることを願っています、多分私はnaoに対して盲目です...


編集 Steven が私を大いに助けてくれたので、誰かが最後のビットが欠けていることに気付くかもしれません: 特定のユーザー向けに作成された投稿を表示しているだけです。私がクエリを理解しているとしても、ピンボードで友人が作成した投稿も取得する必要がありますか? やっぱりmidfriendtables の値も取得する必要がありますか、それとも間違っていますか?


編集 2 したがって、今のところ UNION とサブクエリ メソッドを使用したので、結果がどのように見えるかを説明したいと思います。

表示: どこでも作成されたユーザー投稿、ユーザーボードで作成されたユーザーによる投稿、自分のボードで作成されたフレンド投稿! 友達ボード上の投稿ではありません。

4

2 に答える 2

0

わかりましたので、最終的にユニオンとサブクエリを使用することになりました...おそらく最適ではありませんが、何を改善すべきか良い提案があれば、意見をください! そうでなければ、この投稿が同様の問題を抱えている人々に役立つことを願っています.

    $query = "SELECT DISTINCT `p`.`byuser`, `p`.`newpost`, `p`.`id`, `p`.`postdate`
    FROM `pinnwand` AS `p`
    JOIN `users` AS `u` ON `u`.`id` = `p`.`byuser`
    LEFT JOIN `friends` AS `f` ON (`f`.`friendid` = `u`.`id` OR `f`.`userid` = `u`.`id`)
    WHERE (f.userid = {$myId} OR f.friendid = {$myId})
        AND `p`.`publicp` < 3 
        AND `p`.`typ` = 2
        AND `p`.`byuser` <> {$myId}
    UNION ALL
    SELECT DISTINCT `p`.`byuser`, `p`.`newpost`, `p`.`id`, `p`.`postdate`
    FROM `pinwand` AS `p`
    JOIN `users` AS `u` ON `u`.id = `p`.`byuser`
        WHERE `u`.`id` = {$myId}
        AND `p`.`publicp` < 3 
        AND `p`.`typ` = 2
    ORDER BY `postdate` DESC
    LIMIT 0,10";
于 2013-07-09T14:05:50.213 に答える