Как обновить несколько строк одним запросом - PullRequest
0 голосов
/ 15 мая 2010

Я использую Postgresql + PHP.

Скажите, у меня есть эта таблица:

Books ( id, title, year )

и этот массив заголовков в PHP:

$titles = array ("bible","kafka","Book of Eli");

Теперь я хочу обновить все строки, где заголовок находится в массиве $ title выше.

Так что мне нужен запрос, подобный этому:

UPDATE books SET year = '2001-11-11' WHERE title is in $titles;

Возможно ли с одним запросом? Или мне нужно использовать цикл FOR?

Ответы [ 3 ]

4 голосов
/ 15 мая 2010

Возможно, вы на самом деле были довольно близко.

Для SQL синтаксис выглядит следующим образом:

UPDATE books SET year = '2001-11-11' WHERE title IN ('bible','kafka','Book of Eli');

Чтобы сгенерировать это с помощью PHP, вам нужно сделать что-то вроде этого:

$query = "UPDATE books SET year = '2001-11-11' WHERE title IN ('" . implode("','", $titles) . "');'";

Функция PHP implode() объединяет элементы массива вместе, используя строку, поэтому я помещаю ',' между всеми ними, а начальный и конечный ' помещаются в строку вручную.

Обратите внимание, что в настоящее время это не удастся, если какой-либо из заголовков содержит апостроф. Если это возможно, вам нужно будет избежать их.

1 голос
/ 15 мая 2010

А как же

$sql = "UPDATE books SET year = '2001-11-11' WHERE title in ('".implode("','",$titles)."')";
1 голос
/ 15 мая 2010

Вы можете использовать функцию implode () , которая позволит вам превратить массив в строку через запятую:

$titles = array ("bible","kafka","Book of Eli");
$comma_separated = implode(",", $array)
$sql = "UPDATE books SET year = '2001-11-11' WHERE title is in (" . $comma_separated .")"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...