1

私のWebサイトでは、他のソーシャルネットワーキングWebサイトと同様に、ユーザーは更新でき、他のユーザーは更新にコメントできます。

何をしているのか:

query = fetches first name, last name, user id, update id, update post UNION same details for the user who has logged in i.e /* Updates Of Current Logged In User + Updates Of People He Is Following */

loop {
prints first name last name and update
}

後でコメント機能を導入したので、今はループ内でクエリを呼び出し、コメントに対してループを再度実行します。

loop {
prints first name last name and update

commentquery = fetches firstname, last name, user id, comment, of the particulat post
    again loop {
         prints first/last name of the person who commented, and his comment
     }
}

今私によると、これはSQLクエリで達成できると思います。投稿を取得するときに、コメントを一緒に取得できますか、それともこれは正しい方法ですか?問題は、外側のループが実行されると、内側のループも実行されて適切なコメントをフェッチすることです。テーブルを結合して、投稿/更新に関連するコメントを取得できますか?

4

2 に答える 2

1

これは、データベース構造や実際の SQL なしでは答えることが非常に困難ですが、できるだけ一般化しようとしました。あなたがやろうとしていることは、以下のような 2 つのクエリと 1 つのループを使用して SQL 経由で実行する必要があります。

細かいループを編集して、クエリを再実行します。SQL を使用すると、このすべてのデータを一度に取得できますが、呼び出しごとに割り当てられた情報が複製されます。スケーラビリティと可読性のために、2 つのクエリと 2 つのループに固執します

/** updated after op's comments **/

SELECT data, that, you, want, for, one, post
FROM posts AS a
INNER JOIN users AS b ON b.id = a.user_id

loop over query results () {

    /** output the post data **/

    /** Then select the users who have posted on this post **/
    SELECT a.comments, b.username
    FROM comments AS a
    INNER JOIN users AS b ON b.id = a.id
    INNER JOIN posts AS c ON c.id = a.post_id AND c.post_id = '[post id value]'
    ORDER BY a.date_posted;

    loop comments here {
      /** output comments here **/
    }
}
于 2012-09-25T12:11:31.870 に答える
0

クエリのみでマージすることは可能かもしれませんが、良くないと思います。

しかし、あなたが嫌い​​なことを正しく理解していれば、コメントのクエリがループ内の別の WHERE 句で実行されることです。DB に更新をクエリする前に、表示しているすべての更新のすべてのコメントを 1 つのクエリで取得することで、これを排除できます。

query = select all comments for all updates joined with usernames and whatnot
loop{
    $comments[postid][] = data
}

この後、更新の通常のクエリを実行し、データベースではなくプリロードされた配列からコメントにアクセスします。ただし、これがより良い解決策であるかどうかはわかりません。利点として、更新用のクエリとコメント用のクエリが 1 つだけあり、更新用と各更新のコメント用に 1 つのクエリはありません。違いが本当に大きいかどうかはわかりません。

欠点は、以前のコードがもう少し明白で、他の人にとって読みやすいことです。

于 2012-09-25T12:34:00.097 に答える