MySQL:LIKE和First character

The*_*hew 5 php mysql select sql-like

你好再次Stackoverflow!2 MySQL问题.

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

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

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

第二个也是最后一个问 我想为我的网站制作一个搜索引擎,选择stationname包含的所有行$_POST['search'].但是当我有2行时,例如cheese一个被调用而另一个被调用cheese2,我搜索cheese,只有cheese被选中,当我搜索时cheese2,只会cheese2被选中.有没有办法选择cheesecheese2

Roc*_*mat 16

LIKE支持通配符. %表示任意数量的字符(包括零),_表示任何一个字符

stationname LIKE 'cheese%'
Run Code Online (Sandbox Code Playgroud)

这将匹配cheesecheese2.

您也可以使用%第一个问题.

stationname LIKE 'a%'
Run Code Online (Sandbox Code Playgroud)

这将找到所有开头的单词'a'.


Mos*_*cho 5

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

MySQL 有一个LEFT函数,它似乎是您正在寻找的。所以基本上我们提取的第一个字母stationname并将其与您的字母进行比较:

 where left(stationname, 1) = '" . mysql_real_escape_string($_GET['letter']) . "'";
Run Code Online (Sandbox Code Playgroud)

有没有办法同时选择奶酪和奶酪2?

那么这里的解决方案有点臭,因为您应该检查是否cheese包含在cheese2以及是否cheese2包含在cheese. 尝试这个:

where stationname like '%" . mysql_real_escape_string($_POST['search']) .
  "%' OR '" . mysql_real_escape_string($_POST['search']) .
  "' like concat('%', stationname, '%')";
Run Code Online (Sandbox Code Playgroud)