根据另一个值更新最小值 - MySql

时间:2015-07-08 10:34:26

标签: php mysql

我有一组信息,我将其展示为id,代码和数字。

list ($id,$code,$num) = explode("~",$data);

我需要根据唯一的code将其更新为MySql,最小值为num

假设我的前3个请求看起来像是

id = 9267399
code = 5D:148
num = 64

id = 9267398
code = 5D:186
num = 71

id = 9267397
code = 5D:122
num = 93

然后我的第4个,第5个请求有重复的代码5D:148,其中包含不同的ID和数字。

id = 9267402
code = 5D:148
num = 22

id = 9267563
code = 5D:148
num = 5

现在我需要找到重复min(num)的{​​{1}}并将该记录更新回mysql。我的查询应该看起来像

code

此处$sql = "UPDATE table SET id = '9267398', num = '71' WHERE code = '5D:186' "; $sql = "UPDATE table SET id = '9267397', num = '93' WHERE code = '5D:122' "; $sql = "UPDATE table SET id = '9267563', num = '5' WHERE code = '5D:148' "; 有3个请求,其中5D:148为5。

我试过找到重复的min(num)

code

这是给我的

$temp = array();
foreach ($code as $c) {
    isset($temp[$c]) or $temp[$c] = 0;
    $temp[$c] ++;
}
var_dump($temp); 

我被困在这里如何找到array(3) {["5D:148"]=> int(3) ["5D:186"]=> int(1) ["5D:122"]=> int(1)} 并根据它运行我的更新查询

3 个答案:

答案 0 :(得分:2)

我认为有一个非常简单的解决方案......事实上我只是测试了它......
更新表SET id =' 9267398',num =' 71'代码=' 5D:186'
ORDER BY代码ASC LIMIT 1;

答案 1 :(得分:1)

循环遍历数组并检查num是否低于前一个。

$ data数组的示例:

$data = array(
[0] => array('id' => 9267399, 'code' => '5D:148', 'num' => 64),
[1] => array('id' => 9267398, 'code' => '5D:186', 'num' => 71)
);

-

<?php

$array_to_add = array();

foreach($data AS $val) {

    if(array_key_exists($val['code'], $array_to_add)) {

        if((int) $val['num'] < (int) $array_to_add[$val['code']]['num']) { // Check if num is lower than the previous one
            $array_to_add[$val['code']] = $val; // If yes, overwrite code key with new values
        } 

    } else {

        $array_to_add[$val['code']] = $val; // Add values to array if code doesn't exist in array_to_add

    }

}

var_dump($array_to_add); // ARRAY TO ADD IN DATABASE

foreach($array_to_add AS $val) {

    mysql_query("UPDATE table SET id = ".mysql_real_escape_string($val['id']).", num = ".mysql_real_escape_string($val['num'])." WHERE code = '".mysql_real_escape_string($val['code'])."' ");

}

?>

提示:查看PDO和mysqli以更好地使用mysql查询。

答案 2 :(得分:1)

那么,这个怎么样 - 你可以运行所有请求的查询(你不需要在php中找到min),最后你将获得DB中的min(因为&#34;和num) &gt; 5&#34;) - 我想min是整数,而不是varchar:

UPDATE table SET id = '9267563', num = 5 WHERE code = '5D:148' and num > 5
UPDATE table SET id = '9267563', num = 93 WHERE code = 'SD:122' and num > 93
etc.

不是那么复杂,但它对你有用。