MySQL:LIKE和第一个字符

问题描述:

你好,那里再次Stackoverflow! 2个MySQL问题。MySQL:LIKE和第一个字符

 $query = " SELECT 
         stationname 
        FROM 
         stations 
        WHERE 
         stationname >= '". mysql_real_escape_string($_GET['letter']) ."' 
        ORDER BY 
         stationname 
     "; 

Firstoff,这里是第一个查询。在URL中是包含字母字符的参数集$_GET['letter']。我试图选择stationname$_GET['letter']开头的所有行。所以我在另一个Stackoverflow主题中找到了这个解决方案,但它似乎不工作,我得到了所有的行,而不仅仅是那一个。 编辑:似乎它会检查stationname中的所有字符,而不仅仅是起始字母,我怎么能得到它?

 $query = " SELECT 
         stationname 
        FROM 
         stations 
        WHERE 
         stationname 
        LIKE 
         '". mysql_real_escape_string($_POST['search']) ."' 
     "; 

第二个也是最后一个问题。我想为我的网站制作搜索引擎,选择stationname包含$_POST['search']的所有行。但是当我有2行,一个例如cheese和另一个调用cheese2,我搜索cheese,只有cheese得到选择,并且当我搜索cheese2时,只有cheese2将被选中。有什么办法可以同时选择cheesecheese2

+2

'LIKE '% “mysql_real_escape_string($ _ POST。 '%'[' 搜索])”'首先也可以使用 – hjpotter92 2012-04-10 16:37:52

LIKE支持通配符。 %指任何数目的字符(包括零),并且_指任何一个character`

stationname LIKE 'cheese%' 

这将匹配cheesecheese2

您也可以在第一期中使用%

stationname LIKE 'a%' 

这会找到所有以'a'开头的单词。

+0

谢谢,你能检查我的编辑吗? – Thew 2012-04-10 16:41:13

+1

对于'_' +1,没有意识到它 – mkk 2012-04-10 16:44:14

+0

@Thew:你的意思是对于起始字符? 'stationname LIKE'a%''不工作吗? – 2012-04-10 17:24:11

秒。

$query = " SELECT 
         stationname 
        FROM 
         stations 
        WHERE 
         stationname 
        LIKE 
         '". mysql_real_escape_string($_POST['search']) ."%' 
     "; 
+0

。 – hkutluay 2012-04-10 16:38:27

+0

谢谢,你能检查我的编辑吗? – Thew 2012-04-10 16:40:57

+1

@上面的查询只检查起始字符。 – hkutluay 2012-04-10 16:43:24

在MySQL中的文本通配符%,所以对于你的第一个查询,你可能会想:

$query = " SELECT 
        stationname 
       FROM 
        stations 
       WHERE 
        stationname LIKE '". mysql_real_escape_string($_GET['letter']) ."%' 
       ORDER BY 
        stationname 
    "; 

并为您的第二个查询:

$query = " SELECT 
        stationname 
       FROM 
        stations 
       WHERE 
        stationname 
       LIKE 
        '%". mysql_real_escape_string($_POST['search']) ."%' 
    "; 

我试图选择所有行的名字以$ _GET ['letter'开始]

MySQL有一个LEFT功能似乎是你在找什么。所以基本上,我们提取stationname的第一个字母,并比较其agains你的信:

where left(stationname, 1) = '" . mysql_real_escape_string($_GET['letter']) . "'"; 

有什么办法来选择两种奶酪和cheese2?

那么这里的解决方案是一个有点臭,你应该检查cheese是否包含在cheese2以及是否cheese2包含在cheese。试试这个:

where stationname like '%" . mysql_real_escape_string($_POST['search']) . 
    "%' OR '" . mysql_real_escape_string($_POST['search']) . 
    "' like concat('%', stationname, '%')"; 

FOR电话号码

5认定的第一个字符

$Sql="SELECT * FROM customers WHERE TEL REGEXP '^[5]' LIMIT 0,500";