MySql 存储过程与匹配

标签 mysql stored-procedures matching

我有一个非常简单的存储过程,应该从 1 个数据库表中选择一些列,但我收到与“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 ;

这是我的 table 的屏幕截图 enter image description here

当我测试该过程时,它给了我一个错误“#1210 - MATCH 的参数不正确”我已经测试了该过程中的查询并且它有效,所以我猜测问题出在该过程的语法中本身。感谢您提前的帮助!

最佳答案

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

The search string must be a string value that is constant during query evaluation. This rules out, for example, a table column because that can differ for each row.

我读到此内容是说您不能使用存储过程参数 Description 作为 AGAINST 的参数。

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

<小时/>

回复@Michael 的评论:

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

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

关于MySql 存储过程与匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48045342/

相关文章:

php - 如何在 db 列中查找 [ul] 并替换为 [list]

php - MySql 查询省略了最后记录的行

sql-server - 如果sysname不能为null,那么在这个SQL Server系统存储过程中sysname怎么可能= null呢?

mysql - 存储过程 (mysql) 失败, "can' t 返回给定上下文中的结果集”

java - 扫描大量文件几十个字

javascript - 与参数匹配时返回对象的键和值

mysql - 使用字符串文字执行单行 mysql

php - 如何获取特定用户的数据,但来自不同的表

mysql - 在coldfusion中处理MySQL NativeError Code 1366和SQLState HY000

python - 谁能帮我找出这段代码有什么问题吗?相同RNA序列匹配程序