我遇到下面的sql问题。基本上我有根据格式包含字符串的行:129& c = cars。我只想要数字部分,例如129. sql查询是:
$result = mysql_query("SELECT * FROM " . $db_table . " WHERE id LIKE '" . $id . "%'");
为什么%不工作?我不能使用%...%因为它抓得太多了。
答案 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
上的索引。
这将使您的查询运行得更快。