Im пытается сделать процедуру для обновления недавно выпущенного (недавно) пустого столбца.Как обновить сразу несколько строк в одном столбце?
В этом новом столбце я поместил значения результата, полученного с помощью запроса соединения. Чтобы объяснить это лучше, у меня есть этот
delimiter //
create procedure update_amount_products (in id int)
begin
update categories set products_amount=
(SELECT DISTINCT COUNT(products_to_categories.products_id)
FROM categories_description
INNER JOIN products_to_categories ON products_to_categories.categories_id = categories_description.categories_id
INNER JOIN products_description ON products_description.products_id = products_to_categories.products_id
WHERE categories_description.categories_id =id)
WHERE categories_id = id;
end
//
call update_amount_products(id);
Так что я хочу, это не вызов процедуры каждый раз с diferents «ид», я хочу, чтобы обновить все сразу (потому что есть более 1500 строк с diferents идентификаторы). Что я могу сделать?
Я думал о каком-то «за», чтобы получить все идентификаторы и сохранить их на переменной, которая позже использовалась в моей процедуре обновления, но я видел, что в sql нет возможности массива для каждого.
EDIT: Я хотел бы знать, если это как-то можно (Altho он сейчас не работает)
DELIMITER $$
CREATE PROCEDURE total_updated()
BEGIN
DECLARE a INT Default 1 ;
DECLARE category_length int;
select count(categories_id) into category_length from categories_description;
simple_loop: LOOP
SET a=a+1;
call update_amount_products(a);
IF a >= category_length THEN
LEAVE simple_loop;
END IF;
END LOOP simple_loop;
END $$
Я не могу создать эту последнюю процедуру из-за каким-то глупое предупреждение о разделителе (иногда случается, даже когда я помещаю тот же самый код, который работал до этого)
У вас возникла ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с «//» по строке 19
Любая помощь очень ценится.
Да, я заметил после некоторого исследования, что могу делать то, что вы здесь объясняете, но когда я попытался на самом деле, он отправил мне сообщение об ошибке с сообщением «Операнд должен содержать 1 столбец». В конце концов мне удалось получить то, что мне нужно (обновить весь столбец, используя 2 процедуры, и я покажу в своем ответе выше). Еще спасибо за ответ. Ps: the products_description я использую, чтобы присоединиться для получения имени (не помещался в сообщение, извините) – Nighthunter22
Если у вас есть это сообщение об ошибке, вы попробовали sg совершенно иначе.Вы можете понять, почему mysql сообщает вам такую ошибку [здесь] (https://dev.mysql.com/doc/refman/5.0/en/subquery-errors.html). Кроме того, если вы просто хотите считать product_ids, вам не нужно имя из описания продукта, поэтому вам не нужно входить в эту таблицу. –
Объединения, которые мне нужны для внутренних целей, поэтому я оставляю это так. О сообщении об ошибке мне было все равно, так как это не помогло мне улучшить (по крайней мере, в тот момент). Так что пока я все хорошо. Спасибо за вашу заботу. – Nighthunter22