album:
id  p_id   title 
1    0      类别一
2    1      类别的子类
3    0      类别三
4    3      类别三的子类
album_photo:
id  albumid(对应上面的id) title
1     3                      文章一
2     4 文章2
现在需要做一个 删除 类别的操作, 当删除album 一个类别的时候 , 检查它是否有子类别,如有就删除, 和删除album_phot 对应的文章
请高手指点一下, 谢谢

解决方案 »

  1.   

    试一试delete album ,album_photo 
    from 
    album_photo  left join album on album_photo.albumid = album.id where album_photo.albumid='{$you_want_to_del_ID}'
      

  2.   

    这个要递归处理。function recursion_del($pid)
    {
    echo "正在处理类别:$pid <hr/>  ";
    $sql = "select id  from album where pid = $pid";
    $row = $db->get($sql);  //假设这样就能得到数据并以obj 形式返回.
    foreach($row as $key=>$val)
    {
    recursion_del($val->id);
    }
    handle_delete($pid);
    }function handle_delete($id)
    {
    $sql = "delete from album where id = $id";  //删类别数据
    $db->query($sql);

    $sql = "delete from album_photo where albumid = $id";
    $db->query($sql);

    }
    recursion_del(0);
      

  3.   

    能否一条delete*** (select****) 这样的语言搞定?
      

  4.   

    优化了二楼的代码,删除在一个语句中完成
    <?php
    function recursion_del($pid)
    {
    $ids = $pid;
        echo "正在处理类别:$pid <hr/>  ";
        $sql = "select id  from album where pid = $pid";
        $row = $db->get($sql);  //假设这样就能得到数据并以obj 形式返回.
        foreach($row as $key=>$val)
        {
            $ids .= ','.recursion_del($val->id);
        }
        return $ids;
    }function handle_delete($id)
    {
    $ids = recursion_del($id);

        $sql = "delete from album where id in ($ids)";  //删类别数据
        $db->query($sql);
        
        $sql = "delete from album_photo where albumid in ($ids)";
        $db->query($sql);
        
    }
    handle_delete(0);
    ?>
      

  5.   

    select id  from album where pid = $pid为什么是这样呢? 
      

  6.   

    写不出一句话sql,lz在查找是否有子类别的时候把类别表自结合查询就可以得到,完全不需要递归
      

  7.   

    如果LZ的类别层级只有两层,则可以直接用如下SQL
    delete from album_photo where albumid in ( SELECT id FROM album a  where a.p_id=1 or a.id=1);
    delete from album where id in ( SELECT id FROM album a  where a.p_id=1 or a.id=1);
      

  8.   


    $sql = "DELETE FROM jblog_album WHERE id = 3  or p_id = 3";$query = mysql_query("$sql");if($query){
    echo ok;
    }

    $sql_2 = "DELETE from jblog_album_photo where albumid in(select id from jblog_album where p_id=3 or id = 3)";$query_2 = mysql_query("$sql_2");
    if($query_2){
    echo ok;
    }我只写了两句 - -!
    好谢谢 几位高手指点。   
      

  9.   

    你要先删除photo,不然你的photo删除语句是不会删除任何记录的,因为相应的记录都已经删除掉了,select id from jblog_album where p_id=3 or id = 3查询的结果是空的
      

  10.   

    sorry 之前写的是伪码,db 类,我是随意写的类。现修正一下。
    没测试过,希望能运行。function recursion_del($pid)
    {
        echo "正在处理类别:$pid <hr/>  ";
        $sql = "select id  from album where pid = $pid";
        $row = $db->get($sql);  //假设这样就能得到数据并以obj 形式返回.
    $res = mysql_query($sql);
    while($rows = mysql_fetch_object($res))
    {
       recursion_del($rows ->id);
      
        handle_delete($pid);
    }function handle_delete($id)
    {
        $sql = "delete from album where id = $id";  //删类别数据
        mysql_query($sql);
        
        $sql = "delete from album_photo where albumid = $id";
        mysql_query($sql);
        
    }
    recursion_del(0);