逗号分隔字符串与mysql列更新的比较

时间:2014-03-27 08:57:05

标签: php mysql

我有一个php逗号分隔的字符串$string = (a,b,c)

我在mysql中有一个包含项(b,c,d)的列  我想将列更新为(a,b,c,d)

3 个答案:

答案 0 :(得分:0)

你真的不应该在一个字段中将多个值存储在数据库中 - 即使它可以做你想做的事情,但它的效率非常低。考虑规范化模式并使用与两个表的一对多关系。

如果你必须,那么你可以拥有如下所示的东西。请注意,您必须为此代码添加错误处理

//connect to the database and read existing data
$dbh = new PDO(CONNECT_STRING, USERNAME, PASSWORD);
$dbs = $dbh->query("select data_string from my_table where id=1");
$row = $dbs->fetch(PDO:FETCH_NUM);
$dbs->closeCursor();

//strip parentheses and convert string to array
$cur_data = str_getcsv(substr($row[0], 1, -1));

//strip parentheses and convert new data to array
$string = "(a,b,c)";
$add_data = str_getcsv(substr($string, 1, -1));

//merge existing and new data eliminating duplicates
$new_data = array_unique(array_merge($cur_data, $add_data));

//create new csv string for the merged data
$output = fopen('php://output', 'w');
ob_start();
fputcsv($output, $new_data);
fclose($output);
$value = ob_get_clean();

//update database table with new csv string with parentheses
$dbs = $dbh->prepare("update my_table set data_string=? where id=?");
$dbs->execute(array("($value)", 1));
$dbs->close();

看看需要多少不必要的工作?我真的恳请你重新设计你的架构。

答案 1 :(得分:0)

我想这就是你想要的。

<?php
$string = "b, c, d";
$pieces = explode(",", $string);

for($index=count($pieces); $index>0; $index-- ){
    $pieces[$index] = $pieces[$index-1];
}

$pieces[0] = "a";
$string = implode(", ", $pieces);
echo $string;
?>

答案 2 :(得分:0)

$string = '(a,b,c)';
$column = '(b,c,d)';

$string = substr($string, 1, -1);
$column = substr($column, 1, -1);

$string = explode(',', $string);
$column = explode(',', $column);

$result = array_unique(array_merge($string, $column), SORT_STRING);
$result = '(' . implode(',', $result) . ')';

现在你得到了线索。