0

友達と私による最新のステータス更新が表示されるページがあります。

関連するテーブルは、statusUpdates、users、および friends です。

必要なデータを取得するために使用したスクリプトは -

$myQuery = mysql_query("SELECT * FROM statusUpdates AS su
    LEFT JOIN friends AS fr ON fr.frContactID = su.authorID
    JOIN (users AS u) ON (u.roll = su.authorID)
    WHERE (fr.frHostID = ".$userLoggedIn['roll']." or su.authorID = ".$userLoggedIn['roll'].")
    GROUP BY su.statusID ORDER BY su.statusID DESC LIMIT 0,15");

そして、これを使用してデータを印刷しました-

if (mysql_num_rows($myQuery) == 0) echo "No updates to show";
else
{
    while ($row = mysql_fetch_assoc($myQuery))
    {
        // Print $row['statusID'], $row['status'], $row['authorID'], $row['fullName'], $row['userProfileLink'], etc
    }
}

現在、コメントシステムを組み込むことも考えています。そのために、次のフィールドを持つ新しいテーブルのコメントを作成します -commentID, targetStatusID, commentorID, comment, commentTimeStamp

各ステータス更新のコメントも次の方法で出力されるように、mysql クエリを調整するにはどうすればよいですか?

status1
 - comment1
 - comment2
 - comment3
[text field for new comment to status1]

status2
 - comment1
[text field for new comment to status2]

status3
 [no comments for this post]
[text field for new comment to status3]

status4
 - comment1
 - comment2
[text field for new comment to status4]

[no more posts to show]

その点に注意してください -

commentIDは主キーです。 targetStatusIDは、コメントが作成された特定のステータス更新を示します。 commentorIDは、コメントした人の ID です。 コメントは実際の内容です。 commentTimeStampは、コメントが作成された時刻を示します。

ちなみに、 OOPではなく、手続き型プログラミングを使用してすべてを達成したいと思います。

これを解決する方法の 1 つは、 while 内でクエリを使用して の($row = mysql_fetch_assoc($myQuery))コメントを選択することです$row['statusID']

しかし、多くの投稿を表示したい場合、クエリの数が増えます。

では、私のアプローチはどうあるべきですか?

PS 同様の質問に出くわしましたが、どの回答も私の問題を解決しませんでした。

4

1 に答える 1

0

あなたの構造の SQLfiddle を作成しました。まったく同じではありませんが、基本データはそこにあります。

http://sqlfiddle.com/#!2/c91cb/16

この結果を使用して、explode 関数を使用してコメントを配列にフェッチできます。区切り記号とユーザー ID を使用してコメントを取得することしかできませんでした。誰かがクエリを編集して、ユーザー名を取得できるようにすることができれば、それは良いことです

編集 誰もクエリを編集しない場合は、それらの ID を展開して別のクエリを実行し、ユーザー名を取得できます。助けが必要な場合は、コメントを残してください

于 2013-08-18T07:36:41.287 に答える