SQL - вставка нескольких значений строк в один столбец - PullRequest
5 голосов
/ 24 января 2011

Мне нужна помощь по методу вставки значений в один столбец в разных строках.

Сейчас у меня есть развернутый массив, который дает мне значение, такое как:

(«12», «13», «14»)

Эти цифры являются новыми идентификаторами, которые я хочу вставить в БД.
Код, который я использовал для взрыва массива, таков:

$ combi = "('" .implode ("', '", $ box). "')"; // где $ box - начальный массив

Запрос, который я планирую использовать, застревает здесь:

mysql_query (" INSERT INTO studentcoursedetails (studentID) VALUES

Один из вариантов - повторить это, но я не могу, потому что массив будет зацикливаться; может быть 3 идентификатора, может быть 20.
Цикл не кажется правильным. Любая помощь будет оценена.

Ответы [ 6 ]

3 голосов
/ 24 января 2011

Для вставки более одного значения в таблицу следует использовать синтаксис (значение1), (значение2):

$combi = "('".implode("'), ('",$box)."')";

PS: эта функция называется конструкторами значений строк и доступна с SQL-92

2 голосов
/ 24 января 2011

Если вы используете MySQL, вы можете вставить несколько значений в одно предложение:

sql> insert into studentcoursedetails (studentID)
   > values (('12'), ('13'), ('14'));

Итак, вам просто нужно построить эту строку в PHP, и все готово.

2 голосов
/ 24 января 2011

Некоторые разновидности SQL позволяют составные вставки:

insert into studentcoursedetails (studentid) values
   (1),
   (2),
   (3),
2 голосов
/ 24 января 2011

Разве вы не можете сделать что-то вроде этого:

for($x = 0; $x < count($box); $x++)
{
  mysql_query("INSERT INTO studentcoursedetails (studentID) VALUES ($box[$x]);
}

Это будет работать непосредственно с вашим массивом, вставлять новую строку для каждого значения в $ box, а также предотвращать необходимость развертывания массива в строку с разделителями-запятыми

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

1 голос
/ 24 января 2011

Вы все еще можете создать оператор через implode.Только не используйте ЦЕННОСТИ;вместо этого используйте SELECT

$combi = " ".implode(" UNION ALL SELECT ",$box)." "; // Where $box is the initial array
mysql_query("INSERT INTO studentcoursedetails (studentID) SELECT " . $combi)

SELECT .. union переносится на многие дБмс.

Обратите внимание на идентификаторы - если они числа, не заключайте их в кавычки.

0 голосов
/ 24 января 2011

Проверьте, есть ли вариант функции mysql_query, который будет работать с параметром массива.

...