1

チェックリストシステムを作成しようとしています。収集するアイテムのリスト。ユーザーは自分のプロファイルにリストを追加できるようになり、アイテムを収集するときに、リスト内のアイテムのチェックボックスをオンにして[送信]をクリックすると、チェックされたアイテムに収集済みのマークが付けられます。私はそれをコーディングして正常に動作させていますが、データベースに対して非常に多くのクエリを実行します。

私は5つのテーブルを持っています。ユーザーテーブル(登録ユーザーのユーザー名、id..etc)、リストテーブル(リスト名、説明、idを含む)、リストアイテムテーブル(個々のアイテムを含む。id、title、listID(リストを参照するため)に属する))。userslistテーブル(ユーザーがプロファイルに追加したリストの場合。userIDおよびlistID)およびcollecteditemsテーブル(これには、ユーザーが収集済みとしてチェックボックスをオンにしたリストアイテムが含まれます。listItemsID、UserID)

問題は、mylists.phpページを表示すると、userslistテーブルにクエリが実行され、ユーザーが追加したリストのすべてのIDが返されることです。次に、リストのIDを取得したら、リストテーブルにクエリを実行して、リストの名前を確認します(これは、10個の異なるリストを追加した場合、リストテーブルに10個のクエリを実行する必要があることを意味します)。リスト名列をuserslistテーブルに追加した場合、ページに対して1つのクエリを実行するだけで済み、それはuserslistsテーブルに対して行われ、その1つのクエリでページを作成できます。

4

2 に答える 2

1

データを正規化して(つまり、冗長なデータを避けて)、代わりにを使用して1つのクエリで必要なすべてのデータを収集する必要があるようですJOIN

于 2013-02-23T16:47:26.020 に答える
1

まず、主キーのクエリについては心配しません。すべてのテーブルには、他のテーブルによって参照される主キーがあります。これらは結合を使用します。

次に、リスト名を個別に取得する必要はありません。次のようなクエリを使用します。

select l.listName
from UserLists ul join
     Lists l
     on ul.listId = l.listId
where userId = $userid

これにより、1つのクエリですべての名前が返されます。

于 2013-02-23T16:48:21.383 に答える