このシナリオでは、複数のテーブルから削除しようとしています。私はINNER JOINSを使用して、1つのクエリですべての行を削除しようとしましたが、動作させることができませんでした。複数のテーブルから削除
ここに私の嫌な仕事は周りです:
// Delete course and everything linked to it (topics, badges, dotpoints, questions & answers)
$topic = $this->db->query("SELECT * FROM course_topics WHERE course_id = ".$row_id);
foreach ($topic->result() as $t)
{
$badge = $this->db->query("SELECT * FROM course_topic_badges WHERE topic_id = ".$t->id);
foreach ($badge->result() as $b)
{
$dotpoint = $this->db->query("SELECT * FROM course_topic_dotpoints WHERE badge_id = ".$row_id);
foreach ($dotpoint->result() as $d)
{
$question = $this->db->query("SELECT * FROM quiz_questions WHERE dotpoint_id = ".$d->id);
foreach ($question->result() as $q)
{
$answer = $this->db->query("SELECT * FROM quiz_answers WHERE question_id = ".$q->id);
foreach ($answer as $a)
{
$this->db->query("DELETE FROM quiz_answers WHERE question_id = ".$q->id);
}
$this->db->query("DELETE FROM quiz_questions WHERE dotpoint_id = ".$d->id);
}
$this->db->query("DELETE FROM course_topic_dotpoints WHERE badge_id = ".$b->id);
}
$query = $this->db->query("DELETE FROM course_topic_badges WHERE topic_id = ".$t->id);
}
$query = $this->db->query("DELETE FROM course_topics WHERE course_id = ".$row_id);
}
$query = $this->db->query("DELETE FROM courses WHERE id = ".$row_id);
どのように私はこれを簡素化することができますか?
"削除"が互いにどのように関係しているかを英語で説明できますか?さもなければ、それらが*関連していない*場合 - 別の "削除"ステートメントはあなたの最善の策です。 – paulsm4
カスケード削除を使用したいくつかの外部キーの関係は、***本当に***あなたを助けます。 – Perception