2012-06-20 7 views
0

У меня есть текстовый файл, который содержит, например, названия компаний, продукты и цены. В db содержится около 200 записей и немного больше в текстовом файле. Теперь я хотел бы обновить все цены до db одним запросом sql. Я попытался это:Обновление нескольких строк сразу в MySQL с помощью PHP

for($i = $start_row; $i < $stop_row; $i += 3) 
... 
$prices = array($price1, $price2, price3); 
$pricesfloat = array_map('floatval', $prices); 
... 
$query = "UPDATE test3 SET price1 = $pricesfloat[0], price2 = $pricesfloat[1], price3 = $pricesfloat[2] WHERE company = '$company' AND product = '$product'"; 
mysql_query($query, $connection) or die(mysql_error()); 

mysql_affected_rows() возвращает 0 строк. Я могу вставить все значения в db с помощью INSERT INTO, но в этом случае я должен обновить существующие значения и позже добавить отсутствующие значения. Может ли кто-нибудь помочь? :)

+0

Обратите внимание, что mysql_affected_rows может возвращать 0, даже если обновление прошло успешно. Это когда старые значения и новые значения одинаковы. –

+0

Может быть, REPLACE sql-query может вам помочь? – odiszapc

+0

Если я правильно помню, 'REPLACE'-statement не поддерживает' WHERE' – user1108483

ответ

0

INSERT ... ON DUPLICATE KEY UPDATE, http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html, могут подойти вам ситуация:

INSERT INTO table (product_id, price) VALUES (1, 1.323),(2, 3434) ... (200, 2.333) ON DUPLICATE KEY UPDATE price = VALUES(price) 

Другой способ массового обновления является:

UPDATE table 
INNER JOIN (
    (SELECT 'company1' AS company, 'product1' AS product, 'price1' AS price 
    UNION ALL SELECT 'company2', 'product2', 'price2' 
    .... 
    UNION ALL SELECT 'companyN', 'productN', 'priceN') AS tmp 
) USING (company, product) 
SET table.price = tmp.price 
+0

Я не уверен, могу ли я это работать, потому что у базы данных нет идентификаторов продукта и компаний, для каждой строки есть только идентификатор. И план состоит в том, что соответствующие строки должны иметь обновление, а если нет добавленных данных, php-скрипт спрашивает пользователя, что делать, если совпадения не найдены. – user1108483

+0

Вы можете добавить уникальный индекс (компания, продукт), чтобы иметь дублирующее столкновение. Или используйте сложное обновление с производной производной от объединения: – vearutop

+0

Я попытался добавить уникальный индекс в компанию, но получил сообщение «Дублирующая ошибка ввода». Должен ли я что-то делать с идентификатором записи? Это, конечно, первичный ключ ... – user1108483

Смежные вопросы