1

我试图创建一个清单系统,例如。要收集的项目列表。用户将能够将列表添加到他们的个人资料中,然后当他们收集项目时,可以选中列表中项目的复选框,单击提交,选中的项目现在将被标记为已收集。我已经对其进行了编码并且工作正常,但是它对数据库进行了大量的查询才能正常工作。

我有 5 张桌子。一个用户表(用于注册用户的用户名、id..etc)、一个列表表(包含列表名称、描述、id)、一个列表项表(包含单个项目。id、标题和 listID(用于引用列表)它属于))。userslist 表(用于用户添加到其个人资料中的列表。userID 和 listID)和collecteditems 表(其中包含一个人已选中复选框的列表项。listItemsID、UserID)

问题是当我查看 mylists.php 页面时,它将查询 userslist 表并返回用户添加的列表的所有 ID。然后,一旦我有了列表的 ID,它就会查询列表以找出列表的名称(如果我添加了 10 个不同的列表,这可能意味着必须对列表进行 10 次查询)。如果我在 userslist 表中添加了一个 listname 列,我只需要对该页面进行 1 次查询,即对 userslists 表进行查询,然后我可以使用该 1 次查询来构建页面。

4

2 回答 2

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

这将在单个查询中返回所有名称。

于 2013-02-23T16:48:21.383 回答