2012-12-06 51 views
0

看起来好像我的LIKE mySQL命令生成的结果比我想要的要多。我不明白为什么,我想知道是否有人可以帮助我理解为什么我的查询不能按预期工作,从而帮助我实现目标。我从我的查询中脱离了左边的'%',这有点帮助了,但它仍然产生了很多我不需要的结果。MySQL:使用LIKE生成比我需要的结果更多的结果

例如:

User input ($searchword): 'ad' => returns[4]: 
        'Adele Necklaces, 
         Adwarrior Swords, 
         Affirmative T-shirt, 
         Agtec Radio' 

Trying to get THESE results for user input($searchword): 'ad' => returns[2]: 
                'Adelete Neckalces, 
                Adwarrior Swords' 

SQL命令:

("SELECT * FROM products WHERE prod_name LIKE '".$searchword."%'") 
+0

对于$ searchword左边的%,这些结果是有意义的。我不认为你把它在正确的地方删除了。 – AndreKR

+0

Adelete Neckalces,Adwarrior Swords正是我期望从查询中得到的结果。或者是你想要实现的结果? – Alex2php

+0

我不知道为什么搜索'ad%'会返回你显示的最后两个结果。你确定你正在修改你的搜索字符串吗?你看过发送到数据库的实际查询运行情况,以确保它符合你的预期吗? –

回答

0

我的朋友,我相信你是误会了。 LIKE完全按照您的预期工作。

mysql> create table searchterms (term varchar(64), key(term)); 
Query OK, 0 rows affected (0.01 sec) 

mysql> insert into searchterms (term) values 
('Adele Necklaces'), ('Adwarrior Swords'), 
('Affirmative T-shirt'), ('Agtec Radio'); 
Query OK, 4 rows affected (0.00 sec) 
Records: 4 Duplicates: 0 Warnings: 0 

mysql> set @st='ad'; 
Query OK, 0 rows affected (0.00 sec) 

mysql> set @st='ad'; 
Query OK, 0 rows affected (0.00 sec) 

mysql> select * from searchterms where term like concat(@st, '%'); 
+------------------+ 
| term    | 
+------------------+ 
| Adele Necklaces | 
| Adwarrior Swords | 
+------------------+ 
2 rows in set (0.00 sec) 
+0

在我的情况下,它返回的结果超过2的原因是什么?对我而言,前两项结果与预期一致,此后,术语几乎以'a'开始,然后第二个字母按字母顺序排列...... – AnchovyLegend

+0

删除左侧的'%'将忽略搜索字符串左侧的任何匹配。 – Kermit

+0

@MHZ你的模式是什么样的? – Kermit