Sql:以数字开头的搜索列

时间:2009-06-05 09:53:44

标签: php mysql

我遇到下面的sql问题。基本上我有根据格式包含字符串的行:129& c = cars。我只想要数字部分,例如129. sql查询是:

$result = mysql_query("SELECT * FROM " . $db_table . " WHERE id LIKE '" . $id . "%'");

为什么%不工作?我不能使用%...%因为它抓得太多了。

3 个答案:

答案 0 :(得分:1)

我实际上建议使用匹配的正则表达式,但不幸的是,没有办法用mysql捕获匹配的部分。你将不得不在PHP中进行提取。如果您的数组包含名为$array的所有结果:

$array = preg_replace('/^(\d+).*/', '$1', $array);

答案 1 :(得分:1)

您可以在WHERE子句中使用MySQL'regexp'内容来将检索到的数据量减少到您想要的行数。查询的基本内容如下:

SELECT * FROM table WHERE field REGEXP '^$id&'

其中$ id由PHP插入,您想要的数据始终位于字段的开头,后跟&amp ;.如果没有,当然要调整正则表达式。

不幸的是,MySQL的正则表达式引擎无法捕获,所以你仍然需要在PHP中进行一些解析,如上面的soulmerge所示,但是在MySQL中使用'where regexp'的东西,你只需要处理您知道的行包含您想要的数据,而不是整个表。

答案 2 :(得分:0)

使用这样的查询:

SELECT  *
FROM    mytable
WHERE   id >= '0' COLLATE UTF8_BIN
        AND id < ':' COLLATE UTF8_BIN

将返回以数字开头的所有字符串并使表达式 sargable ,i。即可以使用id上的索引。

这将使您的查询运行得更快。