function fetch_Actor($ActorID){
global $pdo;
$stmt = $pdo->prepare('SELECT * FROM actors WHERE ActorID = ?');
$stmt->execute([$ActorID]);
return $stmt->fetch();
}
$actors = fetch_actor($actor['ActorID']);
foreach ($actors as $actor){
if($actor['ParentID'] > 0){
$actor = fetch_actor($actor['ParentID']);
}
}
上記のコードは、私のデータベースの重複アクターを無効にするために書いたものです。私はPHPでやろうとしていることは、SQLの1つのステートメントで行うことができると信じています。私はどこから始めるべきか分かりません。私は1つのSQLステートメントでこれを行う方法についてのいくつかのガイダンスを探していて、不必要なものを修正するために私の不要なforeach()
ループを取り除いています。次のPHPをSQLに変換する
:
のParentID> 0は、その後のParentID
に 他
アクターID
表を使用して結果をフェッチを使用して結果をフェッチする場合構造
Actors
ActorID | Name | ParentID
1 | Abel | 0
2 | John | NULL
3 | Abel | 1
私は私が= 3
$アクターID場合に返されたく何$アクターID = 2
Actors
ActorID | Name | ParentID
2 | John | NULL
場合に返されたく何$アクターID = 1
Actors
ActorID | Name | ParentID
1 | Abel | 0
場合に返されたく何
Actors
ActorID | Name | ParentID
1 | Abel | 0
私はこれを試してみましたが、これは動作していないよう:
IF((SELECT ParentID FROM actors WHERE ActorID = ?) > 0)
SELECT * FROM actors WHERE ParentID = ?
ELSE
SELECT ParentID FROM actors WHERE ActorID = ?
テーブルの構造やデータが表示されません。欠落している場合はバックアップ値(またはデフォルト値)を設定したいだけですか?このようなものはいかがですか? https://stackoverflow.com/a/34758622/2943403 – mickmackusa
@mickmackusaが修正されました。 – shnisaka
親の長い連鎖がある場合は、それに従うべきですか? 何かのように:4アベル3?上のコードから、答えは「はい」のように見えます。 – Elhana