2012-04-20 29 views
41

yılında yalnızca bir sütun Update:CSV ben şöyle bir tablo var tabloda

products 
-------- 
id, product, sku, department, quantity 

bu tabloda 800.000 girişleri yaklaşık vardır. Ben örneğin, her ürün miktarları her güncelleyen yeni CSV dosyası aldık:

productA, 12 
productB, 71 
productC, 92 

Yani yaklaşık 750.000 güncellemeleri (50.000 ürün miktarında herhangi bir değişiklik vardı) vardır.

Sorum, bunu nasıl CSV product (benzersiz) dışına göre sadece miktar güncellemek için aktarırım ama yalnız sku, department ve diğer alanları terk edilir? Bunu, PHP'de CSV ile döngü yaparak ve her bir satır için bir güncelleme yaparak nasıl yapacağımı biliyorum ama bu verimsiz görünüyor.

cevap

108

800.000 satırlık verileri geçici bir tabloya toplu yüklemek için LOAD DATA INFILE'u kullanabilirsiniz, ardından varolan tablonuzu geçici tabloya eklemek ve miktar değerlerini güncellemek için çoklu tablo UPDATE sözdizimini kullanın. Örneğin

:

CREATE TEMPORARY TABLE your_temp_table LIKE your_table; 

LOAD DATA INFILE '/tmp/your_file.csv' 
INTO TABLE your_temp_table 
FIELDS TERMINATED BY ',' 
(id, product, sku, department, quantity); 

UPDATE your_table 
INNER JOIN your_temp_table on your_temp_table.id = your_table.id 
SET your_table.quantity = your_temp_table.quantity; 

DROP TEMPORARY TABLE your_temp_table; 
+4

Başar - gerçekten sofistike bir cevap bu! En basit ve nokta cevap için – DocJones

+2

+1. Walker @lke – diEcho

+0

, benim bu soruyu http://stackoverflow.com/questions/21495600/import-csv-to-update-rows-in-table –

5

ben ayrı tabloya UPDATE_TABLE içine güncelleme verilerini yüklemek ve kullanarak MySQL içinde bir güncelleme gerçekleştirmek olacaktır:

UPDATE PRODUCTS P SET P.QUANTITY=(
    SELECT UPDATE_QUANTITY 
    FROM UPDATE_TABLE 
    WHERE UPDATE_PRODUCT=P.PRODUCT 
) 

Şu an el altında bir MySQL yok, bu yüzden mükemmel sözdizimi kontrol edebilirsiniz, olabilir LIMIT 0,1'u iç SELECT'a eklemeniz gerekir.

İlgili konular