2009-04-09 4 views
1

Я разрабатываю программу управления посещаемостью, используемую для поддержания записи об отсутствии ученика. Пользователи этого программного обеспечения должны будут вводить различные даты, обновляемые один раз в месяц: например, будет указан список дат, по которым ученик отсутствовал в течение этого конкретного месяца, и моя программа должна затем хранить их в базе данных с каждой дата добавляется как новая строка в соответствующую таблицу.Как я могу вставить массив данных в таблицу базы данных?

У меня есть даты, хранящиеся с использованием массивов внутри, как я могу перенести их в базу данных? Как мне продолжить?

ответ

0

Итерации по массиву и выполнение вставки SQL для каждой даты.

+0

почему почему? потому что я не думаю, что повторение запросов без размышлений и рассмотрение лучших вариантов очень хорошее. но, как я сказал johnnietheblack, мой triggerfinger был слишком быстрым, и я удалил свой downvote. – markus

2

Вы не указали используемую систему баз данных, поэтому мой ответ носит общий характер. Обычный способ сделать это, чтобы запустить несколько операторов вставки один за другим:

INSERT INTO Table1 (FirstColumn, SecondColumn) 
VALUES ('a', 'b'); 
INSERT INTO Table1 (FirstColumn, SecondColumn) 
VALUES ('c', 'd'); 
INSERT INTO Table1 (FirstColumn, SecondColumn) 
VALUES ('e', 'f'); 
GO 

Хитрость способ сделать это состоит в использовании UNION ALL заявление:

INSERT INTO Table1 (FirstColumn, SecondColumn) 
SELECT 'a', 'b' 
UNION ALL 
SELECT 'c', 'd' 
UNION ALL 
SELECT 'e', 'f' 
GO 

версии SQL Server до 2008 поддерживают только эти методы. Но SQL 2008 и MySQL 3,22 и выше поддержки метод строительства, а также ряд:

INSERT INTO Table1 (FirstColumn, SecondColumn) 
VALUES ('a', 'b'), 
VALUES ('c', 'd'), 
VALUES ('e', 'f') 
GO 

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

+0

Мне нравится третий способ, если он работает –

+0

Да, это классно, не так ли! – Cerebrus

2
 
foreach($arrayName as $arrayValue) { 

// run your query here! 

} 

, например:

 
$myArray = array('apple','orange','grape'); 

foreach($myArray as $arrayFruit) { 
$query = "INSERT INTO `Fruits` (`FruitName`) VALUES ('" . $arrayFruit . "')"; 
mysql_query($query, $connection); 
} 

делает это имеет смысл/подходит то, что вы думали?

+0

Возможно, вы захотите использовать переменные связывания ... – Thilo

+0

очень верно ... во-вторых, что ... просто давая простой пример tho. если переменные предоставлены пользователем или у вас есть тонна переменных в массиве, тогда def использовать переменные связывания – johnnietheblack

+0

хорошо, справедливо ... но id хотел бы понять, как это сделать в противном случае? im серьезный ... если у вас есть ресурс, он будет милым. – johnnietheblack

1

Вы хотите сохранить даты отдельно, чтобы вы могли им манипулировать, запрашивать их и т. Д.? Или вы просто хотите сохранить массив как есть?

Если вы хотите сохранить даты отдельно вы можете создать таблицу с FK для студентов, столбец на дату и колонками для природы даты, как отсутствие, поздно ...

Тогда вы действительно сохранили бы отдельные даты в этой таблице. Если вам нужно, итерации, но если вы можете с одним из решений Cerbrus !. Не рекомендуется иметь db-запросы внутри циклов.

Если вам просто нужно сохранить этот массив, вы можете сериализовать его и сохранить сериализованную строку в столбце текста или varchar.

+0

, так вы предлагаете динамически строить инструкцию UNION с помощью цикла - если массив динамический по своей природе? ... а затем вместо повторения нескольких запросов, просто используя UNION один раз? – johnnietheblack

+0

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

+0

правый ... хорошая техника наверняка. это ценно для меня, потому что обычно мне приходится запускать довольно большие динамические циклы для того, что я делаю ... вот почему я хотел знать – johnnietheblack

0

Какой язык и какой тип базы данных вы используете? Это веб-приложение? Настольное приложение? Мы не можем помочь вам без дополнительной информации.

В зависимости от вашей ситуации любое из вышеперечисленных решений может работать. Или вы даже можете загружать все записи посещаемости сразу как CSV или XML-документ. Возможно, немного больше исследований с вашей стороны поможет вам задать более полезный вопрос?