0

我想用这个逻辑创建一个 6 行的限制:

  1. 选择好友列表中的 user_id(也在同一个表中)
  2. 如果少于 6 个,则选择另一个 RANDOM 用户,但不在好友列表中(直到限制为 6 个)
  3. 如果没有 6 个 user_id,则添加一些“虚拟”用户 id(id 为 0)
  4. 所有“真实”用户必须是不同的(id > 0)

    编号 | 好友列表 | 姓名
    1 2,3,5 约翰
    2 1,7,9 迈克尔
    3 1,2,5 汤姆
    4 3,2,6 拉里
    

预期的结果必须是这样的(for a given user e.g. id=1)

2, 3, 4, 0, 0, 0

4

1 回答 1

1

您可能应该以不同的方式存储数据并使用连接从多个表中选择数据。根据您的用例,您还可以考虑存储数据的其他方式。

PEOPLE TABLE
id | name
1  | John
2  | Michael
3  | Tom
4  | Larry

PEOPLE_FRIENDS TABLE
id | person_id | friend_id
1  | 1         | 2          //In this case John is friends with Michael
2  | 3         | 1          //In this case Tom is friends with John.

以下选择将为 John 的朋友提取 id。

SELECT * FROM PEOPLE `P` INNER JOIN PEOPLE_FRIENDS `PF` ON P.id = P.person_id WHERE P.id = 1

还有一百万种不同的方式来编写该查询,但这会让你指向我认为的正确方向。

于 2013-01-18T23:52:15.970 回答