У меня есть таблица comment
и таблица comment_edit
, а также таблица olddb_edit
. Упрощенно соответствующая таблица выглядит так:
CREATE TABLE `olddb_edit` (
edit_id INT NOT NULL,
edit_time INT NOT NULL,
edit_text TEXT NOT NULL,
PRIMARY KEY (edit_id, edit_time)
) ENGINE=InnoDB;
И теперь я хочу перенести содержимое из другой БД в таблицу редактирования, но пропустить некоторые строки таблицы, такие как тестовые комментарии. Я использую для этого CakePHP (на самом деле Phinx).
Обычно этого достаточно:
$skippable = array(
12345, 23456, 34567, 45678,
);
$rows = $this->getQueryBuilder()
->select('*')
->from('olddb_comment')
->where(array(
'comment_id NOT IN' => $skippable,
))
->execute()
->fetchAll('assoc')
;
Но простое предложение NOT IN
, очевидно, не работает с составными первичными ключами.
Я думал, что массив $skippable
должен выглядеть так:
$skippable = array(
array('id' => 707969, 'time' => 1434462225),
array('id' => 707969, 'time' => 1434462463),
array('id' => 707969, 'time' => 1434462551),
);
А затем я прогоню предложение where через цикл for или что-то в этом роде. Но, честно говоря, я даже не знаю, как это сделать в vanilla-MySQL.
Возможно, на SO уже было опубликовано решение, но я не смог найти его (кроме тех, которые относятся к другим приложениям). Думаю, алгоритм мне не друг.