我正在寻找一种在找到LIKE时返回0/1的方法。 我让它在一个使用MATCH AGAINST的不同查询上使用CASE IF语句。但我似乎无法让这个工作。 例如:这在查询的SELECT部分中起作用。
SELECT *, (CASE WHEN IF((MATCH (name) AGAINST ("rubert" IN BOOLEAN MODE))>=1, 1, 0) = 1 THEN 1 ELSE 0 END) as r2....
但我正在寻找0或1对抗LIKE。
当量
SELECT *, (CASE WHEN IF (name LIKE "%rubert%") == FOUND) THEN 1 ELSE 0 END) as found FROM....
有一种感觉我真的很亲密,但似乎没有完全明白......
答案 0 :(得分:3)
你过度复杂了。
SELECT name LIKE '%rubert%' FROM...
在MySQL中,所有布尔值都表示为1
或0
,LIKE
返回布尔值。不需要工作。
MATCH
查询需要IF
的原因是MATCH
返回浮点数而不是布尔值;否则,这就够了:
SELECT MATCH name AGAINST ('rubert' IN BOOLEAN MODE) AS score FROM...
虽然要减少它,但是你经历了IF
和CASE
,这太过分了,因为这已经足够了:
SELECT IF(MATCH name AGAINST ('rubert' IN BOOLEAN MODE) > 1, 1, 0) AS goodenough FROM...
答案 1 :(得分:-1)
您可以按功能
包装它USE `test`;
DROP function IF EXISTS `is_exists`;
DELIMITER $$
USE `test`$$
CREATE FUNCTION `test`.`is_exists` (q varchar(50))
RETURNS INTEGER
BEGIN
DECLARE is_exist INT(11);
DECLARE que varchar(50);
SELECT CONCAT("%",q,"%") INTO que;
SELECT count(*) into is_exist FROM `test`.`users` WHERE `fname` LIKE que;
IF is_exist >0 THEN
RETURN 1;
ELSE
RETURN 0;
END IF;
END;$$
DELIMITER ;
而不是
SELECT is_user_exists("your query");
祝你好运!