0

私は、あなたの友達の投稿がすべて表示される「集合投稿」ページに取り組んでいます。話しているわけではありません$_POSTが、Facebook のステータス更新のような投稿です。私のコードはいくらかは機能しますが、唯一の問題は、3 つ以上の結果が返されることです。理由はわかりません。私は周りを見回しましたが、運がありませんでした。

コード:

        $my_id = $_SESSION['user_id'];
        $frnd_query = mysql_query("SELECT user_one, user_two FROM friends WHERE user_one='$my_id' OR user_two='$my_id'");
        while($run_frnd = mysql_fetch_array($frnd_query)) {
            $user_one = $run_frnd['user_one'];
            $user_two = $run_frnd['user_two'];
            if($user_one == $my_id){
                $user = $user_two;
            } else {
                $user = $user_one;
            }



              $res=mysql_query("SELECT * FROM posts WHERE user_id=$user ORDER BY timestamp DESC LIMIT 0, 3");

              while($row=mysql_fetch_assoc($res)) {
                ?>
                    <div class="span4">
                      <h3><a href="<?php echo username_from_user_id($user); ?>"><?php echo first_name_from_user_id($user), ' ', last_name_from_user_id($user) ?></a></h3>
                       <h8><?php echo date('F j, Y', strtotime($row['timestamp'])) ,' at ', date('h:i A', strtotime($row['timestamp'])); ?></h8>
                      <p><?php echo $row['content']; ?></p>
                      <p><a class="btn" href="#">View Reactions &raquo;</a></p>
                    </div><!--/span-->

                <?php
              }



        }//While Run_frnd

        ?>

複数のことを試しましたが、うまくいきません。また、新しい PDO に関してはどうすればよいですか?

4

2 に答える 2

1
SELECT *
FROM posts p
JOIN (SELECT user_one AS user_id
      FROM friends
      WHERE user_two = '$my_id'
      UNION DISTINCT
      SELECT user_two AS user_id
      FROM friends
      WHERE user_one = '$my_id') u
USING (user_id)
ORDER BY timestamp DESC
LIMIT 3

私のフィドルを見る

于 2013-03-29T19:40:05.683 に答える
0

このクエリ:

mysql_query("SELECT * FROM posts WHERE user_id=$user ORDER BY timestamp DESC LIMIT 0, 3")

このwhileループ内で実行されています:

while($run_frnd = mysql_fetch_array($frnd_query)) {

そのため、合計で最大 3 つではなく、フレンドごとに最大 3 つの結果が得られます。

次のようにして回避できます。

$res=mysql_query("SELECT * FROM posts WHERE user_id=$user ORDER BY timestamp DESC LIMIT 0, 3");

while($row=mysql_fetch_assoc($res)) {

  $i = !isset($i) ? 1 : $i + 1;

    ?>
                <div class="span4">
                  <h3><a href="<?php echo username_from_user_id($user); ?>"><?php echo first_name_from_user_id($user), ' ', last_name_from_user_id($user) ?></a></h3>
                   <h8><?php echo date('F j, Y', strtotime($row['timestamp'])) ,' at ', date('h:i A', strtotime($row['timestamp'])); ?></h8>
                  <p><?php echo $row['content']; ?></p>
                  <p><a class="btn" href="#">View Reactions &raquo;</a></p>
                </div><!--/span-->

    <?php

  if (3 == $i)
  {
    break 2;
  }  

}
于 2013-03-29T19:34:19.143 に答える