我有一个名为friends的表,结构如下:
id, from_id, to_id, confirmed, ....
此表包含所有用户的所有朋友的列表。 from_id和to_id包含用户的id,其中from_id是实际发送好友请求的用户。
现在,我需要选择特定用户的所有朋友的列表。
最好使用以下查询或带有union的查询:
"select (from_id + to_id)- $user_id as friend_id, ... from friends where from_id=$user_id or to_id=$user_id"
答案 0 :(得分:1)
我会使用union
(确保您在from_id
和to_id
上有索引):
select from_id from friends where to_id = $user_id
union
select to_id from friends where from_id = $user_id
在我看来,这种方式更清晰。
答案 1 :(得分:1)
假设你有关于id的键,联合肯定会更好,然后执行算术运算。
答案 2 :(得分:1)
虽然我喜欢你的数学风扇解决方案,但我认为它并没有考虑溢出问题。例如:如果添加两个非常大的数字会发生什么?
除此之外,您的解决方案依赖于数字user_id。使用联合可能需要更多(您应该测试以确保)但可以使用任何数据类型。