0

mysql データベースに 2 つのテーブルがあります

  1. tbl_comments
  2. tbl_user_votes

tbl_user_votes には 3 つのフィールドがあります

1. comment_id, 2. user_id, 3.vote_type ('L' OR 'D') (L for Like, D For Dislike)

ページネーション スキームがあり、それによると、各 Web ページには 20 個のコメントがあります。各コメントには、好き嫌いボタンがあります。ログインしているユーザーが「好き」または「嫌い」をクリックすると、3 つの値が挿入されます。tbl_users_votes, 1. comment_id, 2. user_id, 3. vote_type (L OR D).

ページがリロードされると、彼が「好き」または「嫌い」をクリックしたすべてのコメントが、コメントの下に「好き」または「嫌い」と表示される必要があります。

私の問題は、この問題に対して効率的なアルゴリズムを作成するつもりはないということです。私はそのような解決策を考えました。

このようにコメントごとに SQL クエリを実行し、"SELECT * From tbl_user_votes where comment_id = xyz and user_id = xyz"その user_id と comment_id に対して値が存在するかどうかを確認する必要があります。存在する場合は、このように各コメントの値と Put および If else 条件を確認します

If(vote_found)
  If(vote_type=='L')
   echo "You Like"
  else if(vote_type=='D')
   echo "You Dislike'

しかし、これはこれを行う効率的な方法ではないと思います。ページに20個のコメントがあり、各コメントでデータベースへのSQLクエリが非常に高価であるかのように、非常にメモリと時間のかかるプロセスに見えます。

この問題に対処するためのより良い、より効率的な方法はありますか。

4

1 に答える 1

0

1 つのレコード セットで投票もできるクエリを使用することをお勧めします。

SELECT
  tbl_comments.*,
  tbl_users.*
FROM
  tbl_comments LEFT JOIN tbl_users
  ON tbl_comments.user_id = tbl_users.user_id2
WHERE
  (tbl_users.user_id="xxx")
  OR (tbl_users.user_id IS NULL);

あなたのインデックスが何であるかわからないので、必要に応じて変更するtbl_usersと仮定しました。user_id2

を使用LEFT JOINすると、そのユーザーのすべてのコメントが表示され、存在する場合はユーザーの投票が表示されます。の場合、コメントはありませんtbl_comments.user_idNULL

于 2013-03-04T07:17:13.620 に答える