0

首先让我描述一下我的情况:

我需要为每个用户存储大约 200 个额外的详细信息。我正在使用wordpress。现在有一个默认功能来保存与用户关联的数据。但我不确定我应该使用什么。就我而言,我需要 1 页中的一些数据。例如,我在一页中需要 20 个数据,在另一页中需要 100 个数据。用户可能一次需要 20 个数据或一次需要 100 个数据。

我还没有设计我的数据库表。在了解了最好的查询方式后,我会设计它。要获取用户的 200 个数据(字段),如果可以进行 200 个搜索查询,那么我将使用 wordpress 默认元表。结构如下。

----------------------------------------------
| umeta_id | user_id | meta_key | meta_value |
----------------------------------------------

从上面的结构你可以看到 wordpress 将单个用户的每个数据保存为一行。所以在这种情况下,对于一个用户的 200 个数据,wordpress 将保存 200 行。为了检索数据,我必须进行 200 次查询。

现在,如果最好通过单个查询获取用户的所有数据并将其保存在会话中,那么我将创建自己的表。结构如下。

---------------------------------------------------------------
| User_ID | User_detail_1 | User_detail_2 | User_detail_3 | ...
---------------------------------------------------------------

在上述结构中,我可以将所有这 200 个数据保存在一行中,并且可以在一个查询中获取所有数据,然后在需要时保存到会话和用户。

现在在我的网站中,我不需要一页中的所有数据。在一页上我可能需要 100 个数据,而在另一页上我可能需要 50 个数据。因此,考虑到我的情况,我是否应该将每个数据保存为一行(使用 wordpress 元表),然后对需要 100 个数据的页面进行 100 次查询,并在需要 50 个数据的地方进行 50 次查询?

或者我应该使用一个查询并获取所有数据,保存在 SESSION 然后使用来自需要 50 或 100 个数据的 SESSION 的数据?

4

1 回答 1

2

您不需要 200 个查询来获取 200 个值!

例如,如果在 1 页中,您需要获取具有键“my_data_1”、“my_data_2”和“my_data_3”的 3 个字段,则可以在 where 条件中使用“OR”在单个 sql 查询中获取它们。

SELECT meta_key, meta_value from TABLE_NAME where meta_key='my_data_1' OR 
meta_key='my_data_2' OR meta_key='my_data_3';

这将在单个查询中返回单个结果表中的所有 ur 值:

------------------------
 meta_key | meta_value |
------------------------
my_data_1 | my_value_1
------------------------
my_data_2 | my_value_2
------------------------
my_data_3 | my_value_3
------------------------

然后你可以在你的应用程序中处理它们

于 2013-03-25T14:53:02.163 回答