MySql存储过程与匹配

问题描述 投票:0回答:1

我有一个非常简单的存储过程,应该从1 db表中选择一些列,但是我得到一个与“MATCH AGAINST”语法相关的错误。这是我的程序:

DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `searchItem`(IN `Importer` VARCHAR(100), IN `Description` TEXT)
BEGIN
SELECT model, date_of_production, horsepower, importer, description FROM cars WHERE importer = Importer AND MATCH (description) AGAINST(Description) ORDER BY date_of_production ASC;
END$$
DELIMITER ;

这是我的桌子enter image description here的截图

当我测试程序时它给了我一个错误“#1210 - MATCH的参数不正确”我已经测试了程序中的查询并且它有效,所以我猜这个问题是在程序本身的sintax中。我在这里先向您的帮助表示感谢!

mysql stored-procedures matching
1个回答
1
投票

https://dev.mysql.com/doc/refman/5.7/en/fulltext-search.html说:

搜索字符串必须是在查询评估期间保持不变的字符串值。例如,这排除了表列,因为每行可能不同。

我会读到这一点,说你不能使用你的存储过程参数Description作为AGAINST的参数。

因此,您必须使用PREPARE / EXECUTE在一个过程中执行此操作。


来自@Michael的评论:

这是一个很好的观点,我没有注意到OP的表有一个列,其名称与函数参数的名称相同。你是对的,这可能会引起歧义。

确保过程和参数的参数与任何列具有不同的名称始终是一个好主意,以避免这种模糊性。

© www.soinside.com 2019 - 2024. All rights reserved.