使用素数的路径枚举(插入子)

时间:2012-03-18 06:44:05

标签: mysql sql

我需要一些帮助,

我有一个包含以下数据的表树:

 id | person | prime | product
----+--------+-------+---------
  1      x       2       2
  2      z       3       6
  4      d       5       30

这是如何工作的

Prime和产品用于计算我家的父母子女关系。 Prime =下一个可用的素数 产品=(素数*父母的产品)。素数的每个乘积只能用这些素数除。

对于人d父母是z,因为5(d的素数)* 6(productof z)= 30(d的乘积)

使用相同的原则我必须编写一个单一的查询来将d的孩子(例如a,b,c)插入到表中。

如果有另一个表prime_numbers,其中列素数包含素数列表(2,3,5,7,11,13,17,....)

我曾咨询This

但无法从中获得解决方案。

1 个答案:

答案 0 :(得分:0)

我没有安装mySql所以我无法检查这个,但也许它可以是一个开始 您可以根据某些子查询的连接使用Insert-select

  1. 用于获取下一个素数列表的子查询
  2. 来自your_table,获取父亲(id = 4)
  3. 加入1 + 2以计算下一个产品并添加行号
  4. 具有行号
  5. 的新人(我联合的常量)的子查询
  6. 根据行号加入3 + 4
  7. 所以它可能看起来像:

    SELECT prsns.idd, prsns.namee, t1.nxt, t1.product
    FROM
    (SELECT @rownum:=@rownum+1 'rn', p.nxt prime, p.nxt * tt.product product
    (SELECT cur, max(nxt) as nxt
    FROM 
    ( select t.prime as cur, nxtt.prime as nxt
      from prime_numbers t, prime_numbers nxtt
      where t.prime > nxtt.prime )
    GROUP BY cur
    ORDER BY nxt) p, your_table tt, (SELECT @rownum:=0) r
    WHERE tt.id = 4
    AND p.nxt > tt.prime) t1,
    (
    SELECT @rownum:=@rownum+1 'rn', idd, namee
    FROM (SELECT @rownum:=0) r, (
      select 5 as idd, 'a' as namee union
      select 6 , 'b' union
      select 7 , 'c' union
    )
    ) prsns
    WHERE prsns.rn = t1.rn