У меня есть массив, который захватывает данные флажков и отправляет определенную информацию в базу данных, если данные флажков не являются копией чего-то, что уже есть в базе данных. Я хотел бы знать, как я могу создать код, который просматривает базу данных и находит данные, которые не были частью моих данных флажка, и удаляю их из базы данных.

Хорошо, например, допустим, у меня есть значения 1,2,3,4 в моей базе данных, но в моих флажках я возвращаюсь только 1,2,4. Мне нужен код, который сканирует мою базу данных и удаляет это значение (в данном случае 3) из базы данных.

Вот мой текущий код:

foreach($_POST['publish'] as $index => $val){
$matches = mysql_query("SELECT * FROM `$blog_table` WHERE `postID` = '$val");
    if (mysql_num_rows($matches) > 0)
    {
        // do nothing
    } else {
    $query3 = "insert into `$blog_table`
                     (`postID`)values 
                     ('$val')";
    mysql_query($query3);   
    }
}
0
drummer392 9 Мар 2012 в 22:19

3 ответа

Лучший ответ

Вот код, который я бы использовал с экранированным вводом

if (!empty($_POST['publish']))
{
    $inserts = array();
    $deletes = array();
    foreach ($_POST['publish'] as $val)
    {
        $deletes[] = intval($val);
        $inserts[] = '('.intval($val).')';
    }
    $delete = "DELETE FROM `".$blog_table."` WHERE postID NOT IN (".implode(',',$deletes).");";
    $insert = "INSERT INTO `".$blog_table."` (`postID`) VALUES ".implode(',',$inserts)."";
}
1
RumpRanger 9 Мар 2012 в 18:30

Вы должны использовать такой запрос:

delete from table where id NOT in (3)

В php вроде:

$query = "DELETE FROM `$blog_table` WHERE `postID` NOT IN (" . implode(',', $array) . ")";
0
user973254 9 Мар 2012 в 18:31

Для запроса MySQL вы можете использовать NOT IN:

DELETE FROM tablename
WHERE col1 NOT IN (1, 2, 4)
0
Marcus Adams 9 Мар 2012 в 19:46