繁体   English   中英

php mysql查询获取具有两个不同ID的表的值

[英]php mysql query get value of a table with two different ID

我有这个表名 MyLevels。

 id  | level | ParentLevelId
 ---------------------
 1   | basic | 1
 2   | silver| 1
 3   | gold  | 2
 4   | stone | 3
 5   | wood  | 2

在这张桌子上,每个级别都有一个父级别。 例如, "gold"级别的父 ID 是 2。这意味着父级别是"silver"
所以我需要一个查询来在 html 表中获取以下内容: Parent level来自ParentLevelId

level  | parent level | distance From Basic
-------------------------------------------
basic  | basic        | 0
silver | basic        | 1
gold   | silver       | 2

从距离basic参照每个水平远离数basic水平。
例如, wood等级 id 是 5 和5 - 1 = 4 这意味着它与basic级别相差 4 级。
这是我唯一的代码:

$conn->prepare('SELECT id, level, ParentLevelId FROM MyLevels');

任何帮助表示赞赏。

谢谢

您可以将表与自身联接以从父 ID 中获取父级别的名称。 再次加入即可获得basic级别的ID,因此您可以从中减去ID。

SELECT m2.level, m1.level AS parentLevel, m2.id - m3.id AS distanceFromBasic
FROM MyLevels AS m1
JOIN MyLevels AS m2 ON m1.id = m2.parentLevelId
CROSS JOIN MyLevels AS m3
WHERE m3.level = 'basic'

演示

SELECT
    ml1.level,
    (
        SELECT
            ml2.level
        FROM
            MyLevels AS ml2
        WHERE
            ml2.id = ml1.ParentLevelId
    ) AS parentLevel,
    (
        SELECT
            ml1.id - ml2.id
        FROM
            MyLevels AS ml2
        WHERE
            ml2.level = 'basic'
    ) AS distanceFromBasic
FROM
    MyLevels AS ml1;

请记住,这仅在该列是主键或唯一且该列被用作 parentID 时才有效。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM