簡體   English   中英

PHP MySql從表中獲取數據並將左連接保存到同一個表中

[英]PHP MySql get data from a table and left join to the same table

我有這個表名MyLevels。

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

在這個表上,每個級別都有一個父級別。 例如, "gold"級別的父ID是2.這意味着父級別是"silver"
所以我需要一個查詢來獲取html表中的以下內容:父級別來自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');

任何幫助贊賞。

謝謝

你能試試嗎?

   SELECT a.level, b.level ParentLeve , IFNULL(b.id,0) FROM 
MyLevels a left join MyLevels b on a.id=b.ParentLevelId

請試試這個。

select c.level as level, p.level as parent_level, c.id-p.id as distance_from_parent
from MyLevels AS p
JOIN MyLevels AS c on p.id = c.ParentLevelId

只是另一個版本添加到樂趣中。

我認為操作系統想要獲得基本距離,在這種情況下是id = 1。

無論如何,寫這個的另一種方式是......

SELECT 
      b.level AS level, 
      a.level AS parent_level,
      b.id-1 AS distance_from_basic 
      FROM MyLevels a
        JOIN MyLevels b ON a.id = b.ParentLevelId
            ORDER BY b.id

這是針對OP提供的期望結果進行測試的。

結果:

Level   Parent Level    Distance From Basic
basic   basic                  0
silver  basic                  1
gold    silver                 2
stone   gold                   3
wood    silver                 4

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM