2013-02-20 105 views
1

我正在寻找在我正在制作的网站上实现每个用户的标签/兴趣云功能。PHP和MySQL中的每个用户标签云

每个用户都有一个个人资料页面,并且在所述页面上显示他们预先选择的兴趣的标签云。每个用户都可以键入他们的逗号分隔,并提供建议,如果这样的标签之前已经使用过,或者创建了,如果它不存在。兴趣将是诸如音乐流派,兴趣爱好等东西。

我还想添加基本功能,如比较用户标签云(共享标签),以根据他们的云查找“兼容”的用户。

我可以使用数据库物流的帮助来实现这一点。我了解简单的数据库设计,但是我无法围绕上述设计进行包装。

目前数据库是一张单独的表,带有ID /用户名/密码/验证(最后一个用于电子邮件验证的密钥)。

我为标签云数据库提出的唯一想法是两个表 - 一个标签带有tagid和标记名字段,另一个带有tagid和userid字段的users_tags,以及每个用户标签的条目具有。不过,我不确定这是否是最佳做法。

希望有人可以给我一些这方面的指示 - 在此先感谢。

回答

0

使用userid和tagid的表格听起来像是最佳路线。

找到“兼容”的用户,你提到你可以运行类似的查询来

SELECT 
    ut.userid, COUNT(*) ct 
FROM 
    user_tags ut 
WHERE 
    ut.tagid IN (SELECT uta.tagid FROM user_tags uta WHERE uta.userid=24) 
GROUP BY ut.userid ORDER BY ct DESC; 

注意,上面的查询也将返回原来的用户,但它的效率远高于从移除他查询。

+0

同意 - 除了“......更高效” - 不包括原始帐户不会影响性能/效率。使用内部连接而不是子查询的OTOH很可能会提高性能。 – symcbean 2013-02-20 13:14:07

+0

symcbean,我如何使用内部连接来做到这一点?你能扩大一点吗?谢谢 – Lemon 2013-02-20 13:54:58