MySQL查询中的REGEX

时间:2011-02-08 12:57:15

标签: php mysql regex

我的正则表达式foo不是最好的,但以下不起作用,我正在寻找一些建议:

$query = $_GET['indicator'];
// given: 239,240  or 240,239  or 238,239,240  
//   and: 239, 240 or 240, 239 or 238, 239, 240
//   and: 239
// we need to check for start+number+puntuation(1), punctuation+number+end(2), punctuation+number+punctuation(3)
//                                                  space+number+end(4),       space+number+punctuation(6)
//                      start+number+end(6)
$sql = 'SELECT * from reports WHERE dataSetIDs REGEXP \'';
$sql .= '^'.$query.'[:punct:]|';            // 1
$sql .= '[:punct:]'.$query.'$|';            // 2
$sql .= '[:punct:]'.$query.'[:punct:]|';    // 3
$sql .= '[:space:]'.$query.'$|';            // 4
$sql .= '[:space:]'.$query.'[:punct:]|';    // 5
$sql .= '^'.$query.'$\'';                   // 6
$result = mysql_query($sql);

查询正在查看一个特定的单元格,该单元格具有未设置格式的CSV格式的数字集(即逗号之后可能有空格)。我只用一个条目获取行...但不是csv中包含数字的行。

任何指针都非常感激。

干杯,

的Dom

2 个答案:

答案 0 :(得分:1)

  1. 为什么不爆炸csv?

  2. 您可以对数据库中的csv内容和查询输入进行管理:

    1. 删除所有无用的空间
    2. 使用相同的分隔符','作为示例
    3. 在开头和结尾添加分隔符:

      200,300 => ,200,300,

    4. 使用像“,$ id”这样的正则表达式,这更简单

答案 1 :(得分:1)

计时:

$query = mysql_real_escape_string($_GET['indicator']);
$sql = 'SELECT title from reports WHERE dataSetIDs REGEXP \'(^|[:,:]|[: :])'.$query.'([:,:]|[: :]|$)\'';
$result = mysql_query($sql);

感谢您的帮助@VGE。

干杯,

的Dom