У меня проблемы с моим java-приложением, либо я недостаточно знаю, либо это невозможно в простой форме. Я надеюсь, что это первый вариант так как я новичок.На дубликат ключа на основе двух столбцов
Это мой стол:
CREATE TABLE IF NOT EXISTS `evolution` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`product` varchar(50) NOT NULL,
`quantity` double NOT NULL,
`date` date NOT NULL,
`operator` varchar(50) NOT NULL,
PRIMARY KEY (`id`)
)
Я хочу, чтобы отслеживать некоторые продажи продукции по дате.
Что я хотел бы достичь такой: позволяет сказать, оператор вводит сегодня, 17.01.2014
продукт banana
с количеством 4
.Later тот день, когда он будет вставлять apples
с количеством 10
.Отель тот же день он вставит banana
с количество 1
и apples
с количеством 12
.
Завтра он будет делать то же самое, вставить bananas
с количеством 2
, но на сегодняшний день 18.01.2014
.Это должно быть на новой строке, так как его тот же продукт, но на другую дату.
В этой ситуации, мне нужна своя база данных, чтобы сделать следующее: Проверьте, если banana
был вставлен на 17.01.2014
.Ел нет, то вставить его с количеством 0+4
. Если банана уже вставлена на 17.01.2014
, уточните количество 4+1
.
На следующий день он проверит, был ли установлен banana
на 18.01.2014
. Если нет, вставьте его в количестве 2
. Если да, обновите количество.
Итак: у меня не может быть ни одного из столбцов, уникальных, поскольку дата может быть одинаковой для apples
и banana
и то же самое для даты и, конечно же, количества.
Как я могу это достичь? я думал о нескольких способах, но это не очень эффективно:
Select (product,date) from evolution where product=banana AND date=18.01.2014
Если это возвращает ничего, то я выполнит обновление. Если это ничего не возвращает, я буду исполнять вставку.Сделайте столбец
product-date
, который будет уникальным. В нем я вставлю, например,banana 17.01.2014
. Это было бы проще, но мне не нравится этот путь, его грязный.
Все это было бы так просто, если я мог бы сделать что-то вроде двойной на дубликата key.Try и вставить banana and date
.Затем, если комбинация уже существует, сделать обновление.
Чтобы сделать короче и проще понять:
Это справедливо:
+-------+----------+
|product|date |
+-------+----------+
|banana |17.01.2014|
+-------+----------+
|banana |18.01.2014|
+-------+----------+
|apples |17.01.2014|
+-------+----------+
|apples |18.01.2014|
+-------+----------+
Это не действует:
+-------+----------+
|product|date |
+-------+----------+
|banana |17.01.2014|
+-------+----------+
|banana |17.01 2014|
+-------+----------+
|banana |18.01.2014|
+-------+----------+
|banana |18.01.2014|
+-------+----------+
Таким образом, они (product
и date
) могут быть дубликатами но не вместе.
Извините за длинный пост ... Надеюсь, я не пропущу простой и чистый способ сделать это, но я просто могу и я надеюсь, что так, я новичок в программировании. Спасибо и хорошо провести ночь!
Имейте уникальный ключ (продукт, дата)!?!?! – Strawberry
Похоже, вы после уникального ограничения продукта и даты. Можно добавить его после факта или сделать его частью инструкции create table. Выполнение этого будет выглядеть следующим образом: «ALTER TABLE evolution ADD CONSTRAINT uc_product UNIQUE (продукт, дата)' – Durandal