0

这是 MySQL 表结构:

表:产品

|----------------------------------------------|
|   id    |             product_ids            |
|   1     |              51                    |
|   2     |              616,2,38              |
|   3     |              (NULL)                |
|   4     |              426,605,604           |
|----------------------------------------------|

我正在寻找的是一种代码检查 id 605 是否存在于product_ids行中的方法,以及是否可以替换另一个 ID:

知道我该怎么做吗?

我在想一个sql QUERY ...

4

5 回答 5

3
$sql = "SELECT * FROM products"; 
$r1=$con->execute_query($sql);

while ($row1 = mysql_fetch_array($r1, MYSQL_ASSOC)) {       
  if($row1['product_ids']) {
    $data = preg_split('/,/', $row1['product_ids']);
     if(is_array($data)) {
       foreach($data as $key => $value) {
           if($value == 605) {
               echo $value;
           }
       }
     }
  }   
}

CodePad上查看

于 2013-09-18T21:47:36.610 回答
1
while ($row1 = mysql_fetch_array($r1, MYSQL_ASSOC)) {   

    if($row1['product_ids']){
      $val_changed = false;
      $prod_ids = $row1['product_ids'];
      $ids = explode(',', $prod_ids);
      for($i = 0; $i < count($ids); $i++) {
        if($ids[$i] === '605') {
          $ids[$i] = $new_id;
          $val_changed = true;
        }
      }

      if($val_changed) {
        $prod_ids = implode(',', $ids);
        //update db with new value $prod_ids
      }
    }
}

仅获取具有您要查找的 id 的记录,并使用preg_replace更改值,并使用新值更新表

$new_id = '999';
$new_val = preg_replace('/,605,/', $new_id, $row1['product_ids']);
于 2013-09-18T21:43:25.260 回答
1

这是非规范化问题的最佳http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_find-in-set

于 2013-09-18T21:50:58.400 回答
0

要确定它是否包含“605”:

SELECT id, product_ids FROM products 
where product_ids REGEXP '^.*[^\d]605(?!\d).*$'

评论:顺便说一下,这是一个很好的例子,为什么我们不应该在同一个字段中使用多个值!

现在一旦你拥有它 - 你可以做任何你想做的事,你可以玩它:

$new_product_ids = preg_replace('/^(.*[^\d])(605)(?!\d)(.*)$/','${1}new_id${3}',$row1['product_ids']);

并更新行:

update products set product_ids = '$new_product_ids' where id = $id
于 2013-09-18T21:42:01.907 回答
0

使用正则表达式查询(花式!):

SELECT * FROM products WHERE product_ids REGEXP '^[^0-9]605[^0-9]$';

修改数据的脚本:

while( $row1 = mysql_fetch_array( $r1, MYSQL_ASSOC ) )
{   
    $product_ids = explode( ',', $row1['product_ids'] );

    if( ( $key = array_search( '605', $product_ids ) ) !== FALSE )
    {
        $product_ids[$key] = $new_id_number;

        $product_ids = implode( ',', $product_ids );

        // Enter Code to Update Table Here
    }
}
于 2013-09-18T21:46:35.187 回答