删除NOT IN数组删除所有行,PHP Mysql

u.g*_*gen 1 php mysql

我试图完成删除表的所有行,其中事件id等于某个值(唯一键)和ids不在我的数组中;

所以假设event_id=5有4行(1,2,3,4),我的数组有(1,2)我要删除3,4事件id等于的地方5.

要做到这一点: - >从数组中选择ID并将id放到另一个数组(似乎工作)

- >删除除select with query之外的所有行(失败删除表的所有行).

$query = "SELECT file_id FROM FILES WHERE event_id=$event_id AND name IN ('$names')";
    $result = $sql->query($query); 
    //printf("$query: %s\n", $query);
    var_dump($query);    
    //printf("\n");
    if (!$result) {
        var_dump($result);
        printf("Query failed: %s\n", $mysqli->error);
        sendResponse(417, json_encode("Query failed"));

    exit;
    }
    //printf("\n");
    $rows = array();
    while($row = $result->fetch_row()) {
                $rows[]=$row;
                printf("\n");
    }

    $result->close();
    var_dump($rows);
    printf("\n");

    $delete = join("', '",$rows);
    var_dump($delete);
    printf("\n");

    //send delete request here
    $query ="DELETE FROM FILES WHERE event_id=$event_id AND file_id NOT IN ('$delete')";
    $result = $sql->query($query);
    //printf("$query: %s\n", $query);
    var_dump($query);
    printf("\n");     
    if (!$result) {
        var_dump($result);
        printf("\n");
        printf("Query failed: %s\n", $mysqli->error);
        sendResponse(417, json_encode("Query failed"));

    exit;
    }
Run Code Online (Sandbox Code Playgroud)

日志:

string(143) "SELECT file_id FROM FILES WHERE event_id=7 AND name IN ('sample-1.pdf', '2012-lve-vegas-faq.pdf', 'sample-2.pdf', 'sample-3.pdf', 'sample.pdf')" array(5) { [0]=> array(1) { [0]=> string(2) "89" } [1]=> array(1) { [0]=> string(2) "90" } [2]=> array(1) { [0]=> string(2) "91" } [3]=> array(1) { [0]=> string(2) "92" } [4]=> array(1) { [0]=> string(2) "93" } } string(41) "Array', 'Array', 'Array', 'Array', 'Array" string(99) "DELETE FROM FILES WHERE event_id=7 AND file_id NOT IN ('Array', 'Array', 'Array', 'Array', 'Array')"
Run Code Online (Sandbox Code Playgroud)

你可以在日志中看到$delete = join("', '",$rows);原因('Array', 'Array', 'Array', 'Array', 'Array')不是我想要的,应该是类似的东西('89','90', '91', '92', '93')

我怎样才能做到这一点?

Wri*_*ken 7

可能它应该是$ rows [] = $ row ['file_id']; 或$ rows [] = $ row [0]; (取决于获取方法).但是,这会更可行:

 DELETE FROM FILES WHERE event_id=$event_id AND name NOT IN ('$names')
Run Code Online (Sandbox Code Playgroud)