Separate table or usermeta

时间:2013-05-05 作者:Websavvy

我们正在为用户创建自定义字段,如年收入、性别、城市、国家等。大约有10多个新字段。我们将在一个月内通过CSV导入功能为每个用户导入大约30000条记录。旧记录将有新记录和更新记录。这一进程将持续一年。在这种情况下,请建议从中选择哪个选项

场景1:使用这些新字段创建一个新的WordPress表

场景2:使用wp\\u usermeta添加自定义字段

除了CSV导入之外,我们还将定期提取用户的报告。这将使wp\\u usermeta表保持忙碌。

请建议我们应该采取哪种方案以及为什么?我的建议是使用场景1,因为在这里我们可以非常有效地使用WordPress函数,尽管数据库负载会很高。

1 个回复
SO网友:He Shiming

的明显优势user meta 您可以使用WordPress API记录和检索这些额外的列,而无需编写额外的PHP类或SQL查询。这个wp_usermeta 表的索引非常好,事实上,它每个字段使用一行(如果使用自定义表,则不使用一列),并且不必担心性能。如果您只想记录额外的字段,那么使用用户元API通常意味着更快的开发。

但最终,这取决于您将如何检索数据。对于自定义表,可以执行以下操作:

SELECT `appname`.* FROM `appname` WHERE `appname`.`income` >= 100000;
但是,使用user meta会有点困难,您必须加入:

SELECT `wp_users`.* FROM `wp_usermeta`
LEFT JOIN `wp_users` ON (`wp_usermeta`.`user_id` = `wp_users`.`ID`)
WHERE `wp_usermeta`.`meta_key` = \'appname_user_income\'
AND `wp_usermeta`.`meta_value` >= 100000;
如您所见,这将使您在wp_users, 要获取其他元值,必须根据检索到的user\\u id调用API。(请注意,您不需要仅通过左连接来获取用户id)。

因此,如果您只想在元字段上运行简单的查询,那么可以使用user meta来节省大量的开发时间。但如果编写这些查询会很复杂,那么使用自己的表可能是更好的选择。

结束