我想知道哪些是最好的,当我想检查某人是否已经参加过会员相关活动(如投票):
想象一下,我有存储所有选民投票的表。随着时间的推移,它可以达到一个非常大的规模(500多个条目/票数500个不同的民意调查)。
当我想检查一位会员是否已经投票给我的新民意调查时,最好的是什么? :
1 /在" 10000+条目VOTERS表" 上设置 SELECT或COUNT 以查看所述USERID是否已投票给我的新民意调查
2 /在我的POLL_main_infos表中有 TEXT列,其中i stock / CONCAT USERIDS ,如下所示:
" 1,15,42,12,523,8521,7444等等"
要检查,我将这些列作为变量然后在我的PHP脚本中,我使用REGEX检查其中是否已存在USERID(如查找",42,",意味着具有ID" 42"的用户已参与该投票。
另外,如果第二种解决方案是最好的,我应该在文本列或BLOB中存储IDS吗?
无论如何,非常感谢你提前!
答案 0 :(得分:2)
在关系数据库系统中,通常最好存储规范化的数据,因此不存在用户ID列表。
所以使用Holmes IV建议的表格很简单:
SELECT 'User already voted'
WHERE EXISTS
(
SELECT * FROM Participation
WHERE PollId = 123
AND UserId = 456
)
使用适当的索引(如果用户可能每次投票仅投票一次,则为UNIQUE索引),无论行数如何,这都将非常快。
答案 1 :(得分:0)
你对这有多大的自由?我会说你需要3张桌子,每张1张:民意调查,选民,参与。在Poll表中,存储Poll_ID和Poll_Description。在选民中,您可以存储所有Voter_ID以及您可能拥有的任何其他选民信息。然后在参与中存储,Poll_ID,Voter_ID和结果,或者只是他们参与的日期。然后,当您想要查看此类信息时,您可以查询第3个表,并将其连接到另一个表中
检查用户是否已投票的最佳方法是查询您的设置中的Polls_Voters表格
Select *
from Polls_Voters
where Voter_ID = 'ID of voter you are looking for'
and poll_id = 'ID of poll you wish to see if they voted in'