如何在排序表中获取增量num在另一个表中使用?

时间:2016-12-22 17:30:51

标签: mysql sql sorting join tree

我只是想找人帮助我。

我有两张桌子:

第一: ID,PARENT_ID,水平

第二: ID,名称

我想按名称更正数据树的排序。当然我可以按(级别,父级,名称)排序,然后获取parent_id关联数组以在递归中打印它。

但是我可以看到,如果我不仅存储级别,而是存储相对级别和绝对级别之间的差值,如果将其排序(delta_level,parent_id,id),我可以在不创建关联数组的情况下获取树。 / p>

当然我们需要ID! id确定date_add字段。但是,如果我需要按名称排序相同的方法呢?

第一个查询我们用自动增量@num:= @num + 1对table2进行排序,之后 - 我需要以某种方式将结果连接到table1。

表1 ID,PARENT_ID,delta_level

table2(按名称ASC排序) ID,名称NUM

我需要在(numparent_numdelta_level

等视图中获取每个table1行

有人可以帮忙吗?

第一次编辑:

SET @num1 = 0;
SET @num2 = 0;

SELECT
  t2.`name`,
  t1.`category_id`,
  t1.`path_id`,
  t2.`index`,
  t3.`index` `parent_index`,
  t1.`level` `delta_level`,
  t2.`level` `level`
FROM
  ht_category_path t1
LEFT JOIN (
  SELECT
    @num1 := @num1 + 1 `index`,
    t1.`category_id`,
    t2.`name`,
    t3.`level`
  FROM
    ht_category t1
  INNER JOIN
    ht_category_description t2 ON t1.category_id = t2.category_id AND t2.language_id = 1
  INNER JOIN
    ht_category_path t3 ON t3.category_id = t1.category_id AND t3.path_id = t1.category_id
  ORDER BY
    t2.`name` ASC
) t2 ON t2.category_id = t1.category_id
LEFT JOIN (
  SELECT
    @num2 := @num2 + 1 `index`,
    t1.`category_id`,
    t2.`name`
  FROM
    ht_category t1
  INNER JOIN
    ht_category_description t2 ON t1.category_id = t2.category_id AND t2.language_id = 1
  ORDER BY
    t2.`name` ASC
) t3 ON t3.category_id = t1.path_id
WHERE
  t1.`level` = 0
ORDER BY
  t3.`index` ASC,
  t2.`level` ASC,
  t2.`index` ASC

鉴于查询工作正常。下一个问题 - 如何优化这些问题?

0 个答案:

没有答案