Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Добавление или обновление записей в таблице
 
 автор: SaIdEr   (29.05.2013 в 16:35)   письмо автору
 
 

Здравствуйте, столкнулся с такой проблемой, написал php код на добавление прайс листов
$a = array();
foreach($_POST['file'] as $k => $v){
$a[] = "SELECT '".intval($k)."' id, '".$v."' name_file";
}
$a = implode(' UNION ALL ', $a);

$sql = "INSERT INTO grn_price (".$a.") ;"; 

db_query($sql);

На который передается POST запрос с формы в таком формате
file[1]=price_1.xls&file[2]=price_2.xls...... 

но проблема вот в чем, как так сделать что бы одним запросом к базе данных или добавить прайс лист или обновить ячейку если имеются совпадения.
Совпадения можно искать как по id так и в названии.

  Ответить  
 
 автор: SaIdEr   (29.05.2013 в 19:49)   письмо автору
 
   для: SaIdEr   (29.05.2013 в 16:35)
 

Что, никаких предложений нет?

  Ответить  
 
 автор: Sfinks   (30.05.2013 в 09:25)   письмо автору
 
   для: SaIdEr   (29.05.2013 в 16:35)
 

> как так сделать что бы одним запросом к базе данных или добавить прайс лист или
> обновить ячейку если имеются совпадения.

можно воспользоваться конструкцией ON DUPLICATE KEY UPDATE.
Так как из вашего сообщения ничего не понятно о структуре таблицы и вставляемых данных, приведу пример использования из своего проекта, а вы уж сами адаптируйте под свои нужды:
INSERT INTO `spec`( `product_id`, `box_spec_id`, `spec_co` )
       VALUES( 459, 177, 1 ),
             ( 460, 178, 2 )
ON DUPLICATE KEY UPDATE `spec_co` = `spec_co`+VALUES(`spec_co`)

> Совпадения можно искать как по id так и в названии.
Как можно понять из контекста конструкции, перед вставкой проверяется наличие в таблице записей с первичным ключом или уникальным ключом имеющимися во вставляемых данных.
Следовательно, если вы хотите проверять не только по id, то на название нужно дабавить UNIQUE KEY

  Ответить  
 
 автор: SaIdEr   (30.05.2013 в 10:17)   письмо автору
 
   для: Sfinks   (30.05.2013 в 09:25)
 

Пробовал я пользоваться ON DUPLICATE KEY UPDATE только почему то я страницу открываю на сервере и в базу заношу три строки.

Обновляю страницу - все строки заносятся повторно.

И сколько раз я ее обновляю, столько раз и дублируются все три записи!
Сравниваю по уникальному id

  Ответить  
 
 автор: SaIdEr   (30.05.2013 в 10:43)   письмо автору
 
   для: SaIdEr   (30.05.2013 в 10:17)
 

Все, разобрался, в таблице на id надо было повесить AUTO_INCREMENT и установить первичный ключ

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования