Вопрос по MySQL

B
На сайте с 14.03.2013
Offline
5
544

Здравствуйте! Подскажите пожалуйста, если кто сталкивался. Есть база mysql с таблицей Товары. У таблицы "Товары" есть четыре поля id товара, наименование товара, количество и дата изготовления.

В админке мы добавляем товар в базу через форму.

Вопрос в следующем - если мы сначала добавили товар и его количество, например 10 шт. Через некоторое время еще добавили ТОТ ЖЕ товар но количество его уже 20 шт.

Как сделать, чтобы в базе не создавалась новая запись с этим же товаром, а только изменялось (прибавлялось) количество?

ГG
На сайте с 09.10.2007
Offline
97
#1
brambo:
Здравствуйте! Подскажите пожалуйста, если кто сталкивался. Есть база mysql с таблицей Товары. У таблицы "Товары" есть четыре поля id товара, наименование товара, количество и дата изготовления.
В админке мы добавляем товар в базу через форму.
Вопрос в следующем - если мы сначала добавили товар и его количество, например 10 шт. Через некоторое время еще добавили ТОТ ЖЕ товар но количество его уже 20 шт.
Как сделать, чтобы в базе не создавалась новая запись с этим же товаром, а только изменялось (прибавлялось) количество?

По идее нужно создавать поле "Артикул товара" (уникальный номер для единицы товара) или сравнивать по названию товара, но если попадутся 2 одинаковых названия, будет некошерно.

LEOnidUKG
На сайте с 25.11.2006
Offline
1774
#2

if (если запись уже есть) {UPDATE} else {INSERT}

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/ ✅ Настройка и оптимизация серверов https://getmanyspeed.ru/
B
На сайте с 14.03.2013
Offline
5
#3

id товара, это и есть собственно артикул. По сути это одно и тоже. Ну а вообще это можно реализовать?

---------- Добавлено 06.05.2013 в 13:05 ----------

LEOnidUKG,

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

IL
На сайте с 20.04.2007
Offline
435
#4
brambo:
Update здесь не совсем, мне кажется, подойдет. Он изменит запись на новую, но не прибавит количество.

Вообще, он изменит так, как напишете в запросе..

А для вставки/обновления в MySQL есть такое:

INSERT INTO ..
ON DUPLICATE KEY UPDATE `amount` = `amount` + :amount
... :) Облачные серверы от RegRu - промокод 3F85-3D10-806D-7224 ( http://levik.info/regru )
B
На сайте с 14.03.2013
Offline
5
#5

Спасибо огромное, ща буду пробовать!!!

IL
На сайте с 20.04.2007
Offline
435
#6
brambo:
Спасибо огромное, ща буду пробовать!!!

Удачи..

p.s. А если у разных партий разная дата изготовления? 😂

B
На сайте с 14.03.2013
Offline
5
#7

))) еще не добрался до этого

---------- Добавлено 06.05.2013 в 14:10 ----------

Че то не получается((

Вот мой код:


<?php
include 'connect.php';
$name = $_POST['plity'];
$amount = $_POST['amount'];
$date = $_POST['date'];
mysql_query("INSERT INTO plity (name, amount, date) value('$name', $amount, '$date') ON DUPLICATE KEY UPDATE amount = 'amount' + $amount");
?>

Еще раз:

Вводим товар и его количество, например 10 шт.. Потом опять ввели этот товар, но уже количество 20шт. Нужно чтобы amount (количество) суммировалось.

Помогите пожалуйста!

doctorpc
На сайте с 12.07.2009
Offline
112
#8

чтобы ON DUPLICATE KEY UPDATE работал, надо для начала, чтобы он передавался в запросе (подозреваю что у Вас на поле id стоит AUTOINCREMENT и это PRIMARY KEY). В вашем же случае он просто создастся новый и не будет DUPLICATE.

А вообще не мучались бы вы с этой структурой, а использовали нормальный UPDATE.

Подсказка, перед ним нужно сделать SELECT и проверить есть ли товар с таким id уже в наличии.

Если мои слова не понятны, для начала не помешает глубже изучить основы MYSQL.

siv1987
На сайте с 02.04.2009
Offline
427
#9
doctorpc:
подозреваю что у Вас на поле id стоит AUTOINCREMENT и это PRIMARY KEY

ТС в данном случае оперирует не айдишником, а именем товара. Чтоб DUPLICATE KEY работал, на товаре должен стоять UNIQUE KEY

IL
На сайте с 20.04.2007
Offline
435
#10
brambo:
INSERT*INTO*plity*(name,*amount,*date)*value('$name',*$amount,*'$date')

values....

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий