Ответ 1
Добавьте limit
в delete запрос
delete from orders
where id_users = 1 and id_product = 2
limit 1
У меня проблема с моими запросами в MySQL. Моя таблица имеет 4 столбца и выглядит примерно так:
id_users id_product quantity date
1 2 1 2013
1 2 1 2013
2 2 1 2013
1 3 1 2013
id_users
и id_product
- это внешние ключи из разных таблиц.
Я хочу удалить только одну строку:
1 2 1 2013
Что появляется дважды, поэтому я просто хочу его удалить.
Я пробовал этот запрос:
delete from orders where id_users = 1 and id_product = 2
Но он удалит оба из них (поскольку они дублируются). Любые намеки на решение этой проблемы?
Добавьте limit
в delete запрос
delete from orders
where id_users = 1 and id_product = 2
limit 1
Все таблицы должны иметь первичный ключ (состоящий из одного или нескольких столбцов), повторяющиеся строки не имеют смысла в реляционной базе данных. Вы можете ограничить количество строк с помощью LIMIT
, хотя:
DELETE FROM orders WHERE id_users = 1 AND id_product = 2 LIMIT 1
Но это просто решает вашу текущую проблему, вы должны определенно работать над большей проблемой, определяя первичные ключи.
Вам нужно указать количество строк, которые необходимо удалить. В вашем случае (и я предполагаю, что вы только хотите его сохранить) это можно сделать следующим образом:
DELETE FROM your_table WHERE id_users=1 AND id_product=2
LIMIT (SELECT COUNT(*)-1 FROM your_table WHERE id_users=1 AND id_product=2)
Лучший способ создания таблицы - добавить одну временную строку в качестве автоматического приращения и сохранить в качестве первичного ключа. Поэтому мы можем избежать подобных проблем.
Уже есть ответы на удаление строки на LIMIT
. В идеале у вас должен быть первичный ключ в вашей таблице. Но если нет.
Я дам другие способы:
Я вижу, что id_users и id_product должны быть уникальными в вашем примере.
ALTER IGNORE TABLE orders ADD UNIQUE INDEX unique_columns_index (id_users, id_product)
Они будут удалять повторяющиеся строки с одинаковыми данными.
Но если вы все еще получаете сообщение об ошибке, даже если вы используете предложение IGNORE, попробуйте следующее:
ALTER TABLE orders ENGINE MyISAM;
ALTER IGNORE TABLE orders ADD UNIQUE INDEX unique_columns_index (id_users, id_product)
ALTER TABLE orders ENGINE InnoDB;
Если есть несколько строк, у которых есть повторяющиеся значения, вы также можете воссоздать таблицу
RENAME TABLE `orders` TO `orders2`;
CREATE TABLE `orders`
SELECT * FROM `orders2` GROUP BY id_users, id_product;