Загрузка csv с использованием php в MySQL и обновление также - PullRequest
0 голосов
/ 01 ноября 2010

Хорошо, поэтому у меня есть таблица базы данных, называемая запросами с этой структурой

mysql> desc requests;
+------------+--------------+------+-----+---------+----------------+
| Field      | Type         | Null | Key | Default | Extra          |
+------------+--------------+------+-----+---------+----------------+
| id         | int(11)      | NO   | PRI | NULL    | auto_increment |
| artist     | varchar(255) | YES  |     | NULL    |                |
| song       | varchar(255) | YES  |     | NULL    |                |
| showdate   | date         | YES  |     | NULL    |                |
| amount     | float        | YES  |     | NULL    |                |
+------------+--------------+------+-----+---------+----------------+

Вот несколько примеров данных

+----+-----------+-------------------------+------------+--------+
| id | artist    | song                    | showdate   | amount |
+----+-----------+-------------------------+------------+--------+
|  6 | Metallica | Hello Cruel World       | 2010-09-15 | 10.00  |
|  7 | someone   | Some some               | 2010-09-18 | 15.00  |
|  8 | another   | Some other song         | 2010-11-10 | 45.09  |
+----+-----------+-------------------------+------------+--------+

Мне нужен способ, чтобы дать пользователю способзагрузить CSV с той же структурой, и он обновляет или вставляет в зависимости от того, что в CSV.Я нашел много сценариев в Интернете, но большинство из них имеют жестко запрограммированный CSV, который не то, что мне нужно.Мне нужно, чтобы пользователь мог загружать CSV ... Это легко с php ....

Вот пример CSV

id  artist          song           showdate    amount
11  NewBee          great stuff    2010-09-15  12.99
10  anotherNewbee   even better    2010-09-16  34.00
6    NewArtist       New song       2010-09-25  78.99

Как вы можете видеть, у меня есть идентификатор6, который уже находится в базе данных и должен быть обновлен .. Два других будут вставлены

Я не прошу кого-то написать весь сценарий, но если я могу получить какое-то направление на загрузку, а затем гдеидти оттуда .... спасибо

Ответы [ 2 ]

2 голосов
/ 01 ноября 2010

Создайте процедуру хранения, как показано ниже, и протестируйте ее.Это работает

CREATE proc csv

(
@id int,
@artist varchar(50),
@songs varchar(100),
@showdate datetime,
@amount float
)
as
set nocount on

if exists (select id from dummy1 where id=@id) -- Note that dummy1 as my table.

begin
update dummy1 set artist= @artist where id=@id
update dummy1 set songs=@songs where id=@id
update dummy1 set showdate=@showdate where id=@id
update dummy1 set amount=@amount where id=@id
end
else
insert into dummy1  (artist,songs,showdate,amount)values(@artist,@songs,@showdate,@amount)
Go
1 голос
/ 01 ноября 2010
  1. загрузить файл в каталог, используя move_uploaded_file
  2. используйте fgetcsv , чтобы прочитать загруженный CSV и обработать каждую строку, как вам нравится.
  3. удалить файл csv
...