재귀 함수가있는 다중 레벨 메뉴에서 범주를 삭제하고 싶습니다. 더 신중하게 상황을 이해하기 위해서, MySQL의 테이블 구조를 먼저 살펴 수 있습니다 여기,다단계 메뉴 항목 삭제 재귀 함수
id | p_id | sort_id | title |
1 | 0 | 1 | root1 |
2 | 1 | 1 | sub of root1
3 | 0 | 2 | root2 |
4 | 2 | 1 | sub of "sub of root1"
... | ... | ... | ....
etc ...
내가 삭제 범주에 대한 PHP 스크립트를 작성했습니다가되어 검색 할 때 그것은 다음과 같습니다
CREATE TABLE IF NOT EXISTS menu(
id INT(5) NOT NULL AUTO_INCREMENT PRIMARY KEY,
p_id INT(5),
sort_id INT(5) NOT NULL,
title VARCHAR(50) CHARSET utf8 COLLATE 'utf8_unicode_ci' NOT NULL,
);
=>
function del_cat($connection,$id){
if (!$connection->connect_errno){
if ($connection->set_charset("utf8")){
if ($r = $connection->query("SELECT id FROM menu WHERE p_id=" . $id . "")){
if ($r->num_rows>0){
while ($row = $r->fetch_assoc()){
del_cat($connection,$row['id']);
}
} else {
$connection->query("DELETE FROM menu WHERE id=" . $id . "");
}
$r->free();
}
}
}
}
$connection
변수는 단지 MySQL의 접속 대상물이며 $id
표 id
이다.
1 | 0 | 1 | root1 |
과 같이 하나의 행 (카테고리에 하위, 하위 카테고리가없는 경우)을 삭제할 때 잘 작동하지만 예를 들어 4 | 2 | 1 | sub of "sub of root1"
을 삭제하려는 경우 카테고리를 삭제하지 않습니다. 하위 카테고리가 있습니다. 어떤 아이디어가이 문제를 해결하는 방법? 덕분에
계단식 삭제가있는 해당 테이블에서 외래 키 관계가있는 경우 mysql이 하위 레코드 삭제를 처리합니다. –
@MarcB 외래 키를 사용하고 있지 않습니다. – tnanoba
@MarcB 이것은 정확히 제가이 작업을하려고하는 테이블입니다. – tnanoba