【发布时间】:2014-04-24 23:56:48
【问题描述】:
所以,我收到关于未定义函数的错误。每次我尝试使用计数器变量来引用表中的特定条目时都会发生这种情况。没看懂。
为了更清楚,我被告知为了在 mysql 中使用循环,我必须创建一个我已经完成的“程序”。计数和成分计数变量是对表 tDrinks 和 tUniqueingredients 中正在检查的行的引用。
我正在尝试为表 tDrinkMix 中的 tDrinks 生成饮料 ID 的外键引用。我希望为饮料中独特成分的每个实例都有一个饮料 ID 条目。有 16.5k 饮料和 2.2k 独特成分。
现在它在 SELECT id(count) FROM tDrinks 上死掉了。如果我删除那里的 (count),它会在 WHERE d_shopping(count) 处死掉。
抛出的错误是#1305,它说函数 DrinksDB.id 没有定义
DROP PROCEDURE `test`//
CREATE DEFINER=`root`@`localhost` PROCEDURE `test`()
BEGIN
DECLARE count INT DEFAULT 0;
DECLARE ingredientcount INT DEFAULT 0;
WHILE count < 16532 DO
WHILE ingredientcount < 2202 DO
INSERT INTO tDrinkMix(count)
SELECT id(count) FROM tDrinks
WHERE d_shopping(count)
LIKE CONCAT('%',tUniqueingredients.ingredient(ingredientcount),'%');
SET ingredientcount = ingredientcount + 1;
END WHILE;
SET count = count + 1;
END WHILE;
END
所以我正在努力改进这一点,但我还没有完全做到。你怎么知道这是我的第一个数据库项目?我认为以下越来越接近:该过程至少可以保存并且看起来可以执行
delimiter //
CREATE DEFINER=`root`@`localhost` PROCEDURE `test`()
BEGIN
DECLARE count INT DEFAULT 0;
DECLARE ingredientcount INT DEFAULT 0;
WHILE count < 16532 DO
WHILE ingredientcount < 2202 DO
INSERT INTO tDrinkMix(drink_id)
SELECT id
FROM tDrinks
WHERE id = count
and
d_shopping
LIKE
(SELECT CONCAT (ingredient,'%') FROM tUniqueingredients WHERE id = ingredientcount);
SET ingredientcount = ingredientcount + 1;
END WHILE;
SET count = count + 1;
END WHILE;
END//
【问题讨论】:
-
你希望
id(count)做什么? -
您能提供样本数据和预期结果吗?特别是,想要这两个带有 count 的表达式做什么?
-
我正在构建一个外键引用。我想获取饮料 ID,并让它重复多次,因为有成分。有 16k 饮料和 2k 原料。有些饮料有多达 15 种成分,并且它们的 id 重复次数与成分相同。我预计结束时可能有 80k 的结果
-
我希望 id(count) 返回字段 'id' 的数值,我在表 'tDrinks' 中的计数中购物清单中的项目与独特的成分匹配跨度>
-
“我在哪里”是指“行号”吗?如果没有,你能描述得更清楚吗?
标签: mysql for-loop syntax-error nested-loops