2017-02-06 20 views
1

私はこのテーブル名にMyLevelsを持っています。PHP MySqlはテーブルからデータを取得し、同じテーブルに結合を残しました

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は5、5 - 1 = 4です。これは、レベルがbasicレベルからはるかに離れていることを意味します。すべてのヘルプは感謝

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


は、これは私が持っている唯一のコードです。

ありがとうございました

答えて

1

これを試してください。

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 
+0

ありがとうたくさんの男。これは完全に機能しました。このようなクエリのドキュメントをどこで見つけることができます。 –

+0

これに関する適切な文書はありません。しかし、あなたはジョインについて学ぶ必要があります。 – Naincy

+0

ここで、カウントを追加して各レベルの結果を取得して、サブレベルの数を表示できますか? –

1

これを試すことができますか?

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

ガット・エラー。動いていない。 'SQL構文でエラーが発生しました。 –

+0

エラーは何ですか? –

+0

私は今あなたが確認できるansを更新しました。エラーの場合はエラー –

1

楽しみに追加するもう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 

...この場合には、これを書くための別の方法がある、とにかく= 1

IDである、opは基本からの距離を取得したいと思いましたOPによって提供される所望の結果に対して試験される。

結果:

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

これも機能しました。ありがとう –

関連する問題