SQL(mysql) - 从所有父母用户中选择不同的`产品`

时间:2017-01-04 21:44:55

标签: php mysql sql-server

我只需要在按照ID排序后对产品进行分组,我认为这是经常发生的事情,但每次我都遇到问题。

它是递归嵌套。

products

id
code
user_id
name

数据products

1 code1 1 product_user1_code1
2 code2 1 product_user1_code2
3 code3 1 product_user1_code3
4 code2 2 product_user2_code2
5 code1 3 product_user3_code1

user_nest

id
parent_id
delta_level

数据user_nest

1 1 0
2 2 0
2 1 1
3 3 0
3 2 1
3 1 2

表示用户嵌套:

  • 1
    • 2
      • 3

===

  • 用户拥有默认产品并且可以看到它
  • 用户可以更改产品
  • 用户可以邀请其他用户
  • 新用户必须看到产品具有最接近的父用户更改
  • 新用户可以执行与用户相同的操作 - 查看,更改,邀请

对于给定的示例,我希望得到3行:

product_user3_code1(由我编辑:3) product_user2_code2(由我的父ID编辑:2) product_user1_code3(由admin id:1定义)

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:0)

你可以试试这个: -

SELECT max(t1.id), t1.code, t1.user_id, t2.id, t2.parent_id, t2.delta_level
FROM `user_nest` t1
INNER JOIN
`product` t2 ON t2.`user_id` = t1.`parent_id`
WHERE t1.`id` = 3
GROUP BY t1.code, t1.user_id, t2.id, t2.parent_id, t2.delta_level

虽然我没有尝试过此查询,但我认为这会对您有帮助。

答案 1 :(得分:0)

这个变种变成了解决方案......我必须再测试一下

SELECT
  t1.id
  , t1.parent_id
  , MIN(t1.level) min_level
  , t2.*
FROM
  user_nest t1
INNER JOIN
  product t2 ON t2.user_id = t1.parent_id
WHERE
  t1.id = 3
GROUP BY
  t2.code