我有两张桌子-2和TABLE_3
Preferred_Name|name_TABLE_3
---------------------------
Pref_Name1 |
Pref_Name2 |
Pref_Name3 |
...etcname
-----
name1
name2
name3
...etc我试图使用针对('Preferred_Name')的匹配(名称)来更新表2,其中包含来自TABLE_3的最佳匹配名称,如:
选择
name,MATCH (name) as ('Preferred_Name')作为关联,从TABLE_3WHERE MATCH (name) as ('Preferred_Name')中选择relevance=max(MATCH (name) as ('Preferred_Name'))
但是,由于SET不接受变量,所以我尝试通过一个存储函数来完成它,我试图在phpmyadmin中编写一个存储函数,以便在UPDATE SET语句中使用:
UPDATE `TABLE-2` SET `TABLE-2`.`name_TABLE_3` = best_fulltext_match(`TABLE-2`.`Preferred_Name`);内部代码:
选择
name,MATCH (name) as ('Preferred_Name')作为关联,从TABLE_3WHERE MATCH (name) as ('Preferred_Name')中选择relevance=max(MATCH (name) as ('Preferred_Name'))
当每次使用一个关键字时,工作正常,并显示正确的查询,但当我执行该函数时,没有得到任何结果。感谢你的帮助。
CREATE DEFINER=`root`@`localhost` FUNCTION `best_fulltext_match`(`search_string` TEXT) RETURNS varchar(600) CHARSET latin1
DETERMINISTIC
BEGIN
RETURN (SELECT `name`, MATCH (`name`) AGAINST ('search_string') as relevance FROM `TABLE_3` WHERE MATCH (`name`) AGAINST ('search_string') having relevance=max(MATCH (`name`) AGAINST ('search_string')));
END发布于 2019-09-25 13:43:35
MySQL函数只返回单个值,因此与其从函数返回整个表,不如使用存储过程。
CREATE PROCEDURE `best_fulltext_match`(`search_string` IN TEXT)
CHARSET latin1
BEGIN
SELECT `name`, MATCH (`name`) AGAINST (`search_string`) as relevance
FROM `TABLE_3`
WHERE MATCH (`name`) AGAINST (`search_string`)
GROUP BY `name`
HAVING relevance=max(MATCH (`name`) AGAINST (`search_string`)));
ENDhttps://stackoverflow.com/questions/58099495
复制相似问题