gpt4 book ai didi

mysql - 在表中查找常见行的最佳方法是什么

转载 作者:行者123 更新时间:2023-11-30 23:38:46 24 4
gpt4 key购买 nike

我们有一个web项目,有一些选择题,注册用户回答...
我想找两个用户的共同答案来做个比较。我的意思是,登录用户将转到其他用户的个人资料页面,并仅查看他们对常见问题的答案的比较...

表格就像(简化):

问题
编号
问题
事件 -> 枚举('Y','N')

答案
编号
问题编号
回答

用户
编号
尼克

user_answers
用户编号
问题编号
answer_id
私有(private) -> 枚举('Y','N')

我可以通过给定别名将 user_answers 表与其自身连接起来,但我也必须连接其他表。不应该考虑私有(private)答案,只应考虑主动问题...

该站点预计会承受一些负载,所以我担心连接和位置条件太多。根据我的经验,我知道这些复杂的查询会锁定表并导致一些严重的性能问题,尤其是在重负载下...

那么当考虑到可扩展性和性能时,最佳实践是什么......会smt。像狮身人面像或太阳能帮助,或任何基于软件的解决方案来进行比较?

结果会顺便分页...

现在我正在考虑将问题详细信息和答案详细信息分开并缓存它们,因此查询将是 smt。喜欢:

select ua1.answer_id as her_answer_id,
ua2.answer_id as my_answer_id,
ua1.question_id
from user_answers ua1
inner join users_answers ua2 on ua1.question_id=ua2.question_id
where ua1.user_id=$herId
and ua2.user_id=$myId
and ua1.private='N'
order by ua1.question_id desc

questions.question 和 answers.answer 将从缓存中获取...在这种情况下,被动问题将是一个问题,但我想我会尝试将被动问题转移到一些备份数据库中,这会使事情变得复杂...

最佳答案

我会在查询中使用条件:

select
user_answers.question_id `QuestionId`,
max(if((user_answers.user_id = my_id), user_answers.answer_id, 0)) `MyAnswer`,
max(if((user_answers.user_id = other_id), user_answers.answer_id, 0)) `OtherAnswer`
from users_answers
where user_answers.private = 'N'
and user_answers.user_id IN(myid, orderid)
group by users_answers.question_id
having count(*) = 2
order by user_answers.question_id

还没有测试过,但你应该明白了!

希望这对你有用...

关于mysql - 在表中查找常见行的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5225957/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com