2012-04-10 26 views
3

你好,那裏再次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

回答

11

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

3

秒。

$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

1

在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']) ."%' 
    "; 
4

我試圖選擇所有行的名字以$ _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, '%')"; 
0

FOR電話號碼

5認定的第一個字符

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