UNION SELECT与虚拟数据

时间:2013-01-18 22:54:53

标签: mysql sql join

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

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

    id | friends_list | name
    1    2,3,5          John
    2    1,7,9          Michael
    3    1,2,5          Tom
    4    3,2,6          Larry
    
  5. 预期结果必须类似于(for a given user e.g. id=1)

    2, 3, 4, 0, 0, 0

1 个答案:

答案 0 :(得分: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

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