2014-09-23 44 views
0
工作(YY)GG%

我已經使用存儲過程來檢查名稱是否在一個表中存在或不使用下面的代碼片段..LIKE%XX不能在MySQL中

BEGIN 
IF ids = 0 THEN 
SELECT * FROM table_name WHERE `table_id` = alb_id AND name LIKE CONCAT('%',var_name,'%'); 
END IF; 
END 

我得到了解決如果名稱不包含任何特殊字符或括號,如XXXX。

如果名稱中包含任何括號,表示結果沒有出現,如XX(YY)GG。

建議我最好的解決方案

編輯:

在此,如果名字已經存在我不應該再重新插入,這種情況我用這個方法。如果返回mysql_num_rows> 0意味着我不會插入,否則我將插入名稱到我的表...

我的樣品名稱是..

  • 打開表(現場聲)
  • 隱藏我的心臟
  • 有人喜歡你(現場聲)
  • 現在(NA NA NA)
  • 你保持更長的時間
  • 像你這樣

在名稱「Someone Like You」和「Someone Like You(Live Acoustic)」是兩個不同的名稱,我想識別名稱「Someone Like You(Live Acoustic)」已經存在或不是..

我該怎麼辦?

+0

這裏var_name是通過過程的變量 – gowri 2014-09-23 17:58:29

+3

爲什麼一個子字符串足以成爲相同的名稱?即如果有一個「伊麗莎白」,那麼「伊麗莎」會符合你的WHERE條件,但如果首先有一個「伊麗莎」,那麼「伊麗莎白」不符合你的條件。 – VMai 2014-09-23 18:03:34

+0

請問您可以添加一些示例數據,您得到的結果和您想要的結果?你在問題標題中的表達方式工作正常,請參閱[this fiddle](http://sqlfiddle.com/#!2/4da0f/2)。 – VMai 2014-09-23 18:29:52

回答

0
CREATE TABLE `stack_test` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `text` varchar(100) DEFAULT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB CHARSET=utf8; 


INSERT INTO `blur_new`.`stack_test` (`id`, `text`) VALUES ('1', 'run (rabbit) run'); 
INSERT INTO `blur_new`.`stack_test` (`id`, `text`) VALUES ('2', 'test'); 

set @a = 'n (rabbit)'; 
select * from stack_test where text like concat('%',@a,'%'); 

結果: 1 |運行(兔)運行

所以,它的工作原理。

檢查的條件,在where子句

檢查你是如何傳遞的價值

你可能得去檢查你的數據類型的其餘部分。我有一種感覺是不對的