2014-03-19 58 views
3

所以,我收到一个关于未定义函数的错误。每次我尝试使用计数器变量来引用表中的特定条目时,都会发生这种情况。我不明白。#1305 - 功能不存在 - 嵌套循环

为了更清楚起见,我被告知,为了在mysql中使用循环,我必须创建一个我已经完成的“过程”。 count和ingredientcount变量是对表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// 
+0

你期望'id(count)'做什么? – Bohemian

+0

你能提供样品数据和预期结果吗?特别是,希望这两个表达式有什么关系? –

+0

我正在构建一个外键引用。我想喝一杯饮料,并重复尽可能多的成分。有16k饮料和2k食材。一些饮料有多达15种成分,并且会有他们的成分重复多次。我期待可能80k结果,当它结束 – user3435525

回答

0

相信发生了误差,因为解析器解释ID(计数)作为函数。它正在你的数据库中寻找一个功能,我猜是DrinksDB。当您从id中移除(count)时,它将移动到d_shopping(count)的下一个语法错误,并在数据库中查找名称为d_shopping的函数。 我很欣赏我迟到这(我只是扫描公开问题),所以它可能不再是一个问题。如果它仍然是一个问题发表评论。

+0

如果你'相信'这应该是一个评论,而不是一个答案。 –

+0

注意。谢谢。 – user3884144