0

私はデータベース構造に不慣れです。ユーザーが特定のエントリを高く評価できるアプリを作成しようとしていますが、同様のアクションの前後でビジュアルを変更できるように、ユーザーにいいねを結び付けられるようにしたいと考えています。

調査から、「entries」テーブルと「users」テーブルを作成してから、2つを相互に結び付ける「likes」テーブルを作成する必要があると思います。

私が確信していない唯一のことは、コンテンツを取得して表示するときです...クエリをどのように記述しますか?必要なすべてのエントリをクエリする場合は、戻ってそれぞれを個別にクエリして、現在のユーザーに類似しているものがあるかどうかを確認しますか?それは費用のかかる操作かもしれないようです。より効率的な方法はありますか?

それが理にかなっていることを願っています、ありがとう。

4

3 に答える 3

1

列entity_id(およびエンティティに関して保存するその他のもの)を持つテーブルEntriesと、列user_idおよびentity_idを含む2番目のテーブルUserLikesがあるとすると、次のようになります。

 SELECT Entries.col1, Entries.col1 . . ., UserLikes.user_id
     FROM Entries LEFT OUTER JOIN UserLikes ON 
         Entries.entity_id = UserLikes.entity_id
     WHERE UserLikes.user_id = :user_id
         AND Entity.col_whatever = :whatever

この例では、Entries.col1、Entries.col2です。。。エントリについて取得する列のリストです。:user_idは、現在エントリを表示しようとしているユーザーのIDを含むパラメータです。そして最後の行は、エントリに設定したい制限が返されることを意味します。

このクエリにより、検索した各エントリの行が表示されます。返された列user_idの値を確認できます。NULLの場合、ユーザーに高く評価されていません。ユーザーのIDが含まれている場合、ユーザーに高く評価されています。

于 2010-10-25T00:46:37.903 に答える
1

あなたは正しいデータベース設計を念頭に置いていると思います。クエリに関する限り、テーブルを次のように想定します。

ユーザー

ID | 名前
1 | ボブ
2 | サリー

エントリー

ID | 名前
1 | 赤
2 | 青
3 | 黄色

いいね

UserID | EntryID
1 | 1
1 | 2
2 | 2
2 | 3

つまり、ボブは赤と青が好きで、サリーは青と黄色が好きだと言えます。したがって、すべてのエントリを取得するためのクエリに加えて、ボブが好きなもののインジケータは次のようになります。

SELECT 
e.ID,
e.Name,
l.UserID
FROM Entries e LEFT JOIN Likes l ON l.EntryID = e.ID
WHERE l.UserID = 1 -- Bob's User ID
ORDER BY e.Name

これは戻ります

ID | 名前| ユーザーID
2 | ブルー| 1
1 | 赤| ヌル
3 | 黄色| 1

UserID列は、Bobがエントリを気に入ったかどうかを示します。NULLはNoで、値はYesです。

于 2010-10-25T00:55:56.093 に答える
0

uは、エントリの取得とlikesテーブルのクエリを同時に実行して、現在のユーザーがストアドプロシージャを実行するエントリを気に入っているかどうかを確認できると思います。したがって、uは、クエリによって返されるデータセットの値を制御できます。たとえば、エントリテキスト用に1つの列を返し、現在のユーザーの好みを評価するために1つのブール列を返します...このようにして、ストアドプロシージャの少なくとも1つのパラメータを取得します。現在のユーザーが誰であるかを示す

このアイデアがお役に立てば幸いです...

于 2010-10-25T00:28:26.067 に答える