0

Facebookのようなウォールポストスクリプトを作成しようとしています

ニュースフィード領域には、現在のユーザーと友人からの投稿が表示されます。

私は3つのテーブルを使用しています:

  1. ユーザー: ユーザー ID、ユーザー名、fname、lname、性別、電子メール。

  2. 投稿: post_id、ユーザー名、投稿者、タイトル、タイプ。

  3. 友達: ID、user1、user2。

ユーザーが別のユーザーを追加すると、両方がフレンド テーブルに追加されます。

私はmysqlビューを使用して一時テーブルを作成し、現在のユーザーのすべての友達を次のステートメントで保存しています:

$friends = "CREATE VIEW ".mysql_real_escape_string($_SESSION['username'])." AS 
    SELECT users.username "."FROM users, friends "."
    WHERE ((users.username = friends.user1 OR users.username = friends.user2) AND 
    (users.username != '".mysql_real_escape_string($_SESSION['username'])."')) AND 
    (friends.user1 = '".mysql_real_escape_string($_SESSION['username'])."' OR 
    friends.user2 = '".mysql_real_escape_string($_SESSION['username'])."')";

mysql_query($friends) or die(mysql_error());

以下のステートメントを使用して、ページに投稿を表示しています。

$query = "SELECT posts.*, user.fname, user.lname, user.username "."FROM 
    posts, users, ".mysql_real_escape_string($_SESSION['username'])." "."
    WHERE 
    (users.username = ".mysql_real_escape_string($_SESSION['username']) ".username 
    AND users.username = posts.username) OR 
    (users.username = '".mysql_real_escape_string($_SESSION['username'])."' AND 
    users.username = posts.username) 
    ORDER BY posts.post_id DESC LIMIT 0, 11";

問題は、友達の投稿が問題なく表示されることです。ただし、現在のユーザーからの投稿は、友人ごとに 1 回繰り返されます。

つまり、友達が 5 人いる場合、私の投稿はそれぞれ 5 回表示されます。

このクエリの何が問題なのかを教えてください。これを行うためのより良い方法があれば投稿してください。

4

1 に答える 1

0

MySQL GROUP BY Aggregateを使用する必要があります。

$query = "SELECT posts.*, user.fname, user.lname, user.username "."
    FROM posts, users, ".mysql_real_escape_string($_SESSION['username'])." "."
    WHERE (users.username = ".mysql_real_escape_string($_SESSION['username']) ".username  
    AND users.username = posts.username)
    OR (users.username = '".mysql_real_escape_string($_SESSION['username'])."' AND 
    users.username = posts.username) 
    GROUP BY posts.post_id
    ORDER BY posts.post_id DESC
    LIMIT 0, 11";`

これにより、post_id に基づいて投稿が 1 行にグループ化されます。

于 2012-09-14T15:26:19.707 に答える