将值添加到数据库加1

时间:2013-07-18 14:53:11

标签: database phpmyadmin

在我的数据库中,我有:

行ID - 驱动程序ID - 日志ID。

行ID是唯一且自动递增。我想要的是日志ID对于具有该驱动程序ID的每一行都是唯一的。

例如,假设插入了一行,其中包含驱动程序ID 1我希望该行的日志ID为1,但下次插入一行时,驱动程序ID为1,我希望它的日志ID为2。

我怎样才能做到这一点?

通过数据库我正在使用PHPMyAdmin。

----------------编辑----------------------

这就是我现在在PHP中的内容,但它说:

在网页上:不正确的整数值:''对于第1行的'FinesCost'列

我转储变量并得到这个:string(2)“16”string(2)“16”string(2)“16”所以我不明白为什么它说错误的整数值以及为什么它说他们是非定义的,因为它们的定义非常明确。

在PHP错误日志中:[19-Jul-2013 10:44:18 Europe / Minsk] PHP注意:未定义的变量:C:\ inetpub \ wwwroot \ hosting \ Dan \ JWT \ drivers-log-send中的FinesCostPost2 .php在336行 [2013年7月19日10:44:18欧洲/明斯克] PHP注意:未定义的变量:第336行的C:\ inetpub \ wwwroot \ hosting \ Dan \ JWT \ drivers-log-send.php中的TravelExpensesPo st2

/// PHP将驱动程序的详细信息插入银行数据库

session_start(); 

$host=""; // Host name
$username=""; // Mysql username
$password=""; // Mysql password
$db_name=""; // Database name
$tbl_name="jwtdriversbank"; // Table name

$un = "";
$usrname = "";
$usrpass = "";
$userID = "";

mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");

if(isset ($_SESSION['usrName']))
{
    $usrname = $_SESSION['usrName'];
}
else
{
    echo "4";
}

//var_dump ($usrname);

if(isset ($_SESSION['usrPass']))
{
    $usrpass = $_SESSION['usrPass'];
}
else
{
    echo "5";
}

$sql="SELECT * FROM jwtdrivers WHERE username='$usrname' and password='$usrpass'";
$result=mysql_query($sql);
$rows=mysql_fetch_array($result);

$userID = $rows['id'];

//var_dump ($userID);

if($userID == "")
{
    echo "3";
}
else
{

            $TotalProfitPost = $TotalProfit;
    $LateFeePost = $LateFee;
    $FinesCostPost2 = $FinesCost;
    $TravelExpensesPost2 = $TravelExpenses;
    $FuelCostPost = $FuelCost;
    $CargoDamagePost = $CargoDamage;
    $TruckDamagePost = $TruckDamage;

    var_dump ($TotalProfitPost);
    var_dump($FinesCostPost2);
    var_dump($TravelExpensesPost2);

    $sql="INSERT INTO jwtdriversbank2 (DriverID, LogID, TotalProfit, LateFee, FinesCost, TravelExpenses, FuelCost, CargoDamage, TruckDamage) VALUES ('$userID', COALESCE((Select MAX(LogID) from jwtdriversbank2 tab2 where tab2.DriverID = '$userID'),0)+1,'$TotalProfitPost','$LateFeePost', '$FinesCostP‌ost2' , '$TravelExpensesPo‌​st2' ,'$FuelCostPost','$CargoDamagePost','$TruckDamagePost')";

    $result = mysql_query($sql);

    if($result)
    {
    }
    else
    {
        die(mysql_error());
    }

}

2 个答案:

答案 0 :(得分:1)

一个快速的解决方案是使用子查询来查找最大日志(最后一个日志ID)然后递增它,就像这样

Insert into <table_name>
values p_RowID, p_DriverID, COALESCE((Select MAX(Log_id) from <table_name> tab2 where tab2.Driver_id = p_DriverID),0)+1;

此处p_RowIDp_DriverID是您传递到表格中的值。 Coalesce函数会检查给定的值,如果它是NULL,那么它会用第二个参数替换它,在这种情况下0

答案 1 :(得分:1)

为两列添加主键。

应该这样做。

请查看此link以获取帮助

ALTER TABLE table_name
ADD CONSTRAINT pk_DriverID PRIMARY KEY (DriverID,LogID)

不要忘记删除第一个主键,因为您不再需要它。

编辑:完成其他答案

以下是插入数据的代码。

Insert into <table_name>
values p_RowID, p_DriverID, COALESCE((Select MAX(Log_id) from <table_name> tab2 where tab2.Driver_id = p_DriverID),0)+1;

那应该关闭这个问题。

您没有定义变量,因为PHP无法读取它们。 我在VIM编辑器中打开了你的程序,我找到了“&lt; 200c&gt;” SQL查询中的$ FineCostPost2中的char。你必须改变它才能使它工作。