1

如果现有行中有空字段,如何将一行与现有行合并而不是插入它?

这里举个例子。现有行:

id    f1    f2    f3    f4    ...
0     a           b     
1     c                   

要插入的行:

id    f1    f2    f3    f4    ...
NULL        d  

需要的结果:

id    f1    f2    f3    f4    ...
0     a     d     b     
1     c 

我为此制作了一个 PHP 函数,它SELECTS为每个字段清空行并更新此行中的数据,但这太慢了。有什么方法可以改进和加速这段代码吗?

foreach($cond as $cond_name = > $cond_value) {
    if ($cond_value != '') {
        $cond_count++;
        $q = 'SELECT `id` FROM `g_ul_cond_orders` WHERE `ul_id`='.$ul_id.' AND `'.$cond_name.'`="" LIMIT 1;';
        $r = mysql_query($q);
        if ($r) {
            if ($row = mysql_fetch_assoc($r)) {
                $q = 'UPDATE `g_ul_cond_orders` SET `'.$cond_name.'`="'.$cond_value.'" WHERE `id`='.$row['id'].';';
                $r = mysql_query($q);
                if ($r) {
                    $cond[$cond_name] = '';
                    $cond_count--;
                }
            }
        }
    }
}
4

2 回答 2

3

至少您可以使用一个查询进行更新

UPDATE `g_ul_cond_orders` SET `'.$cond_name.'`="'.$cond_value.'" WHERE `id`= (SELECT `id` FROM `g_ul_cond_orders` WHERE `ul_id`='.$ul_id.' AND `'.$cond_name.'`="" LIMIT 1);

使用此查询,将不需要第二个查询和代码中的结果。

于 2012-12-01T00:55:41.303 回答
0

您可以使用通常称为“upsert”的方法来实现这一点 - 在 mySQL 中,您可以使用“INSERT..ON DUPLICATE KEY UPDATE”语法来实现

于 2012-12-01T00:40:54.013 回答