Database 向数据库中添加值加1

Database 向数据库中添加值加1,database,phpmyadmin,Database,Phpmyadmin,在我的数据库中,我有: 行ID-驱动程序ID-日志ID 行ID是唯一的且自动递增。我想要的是,对于具有该驱动程序ID的每一行,日志ID都是唯一的 例如,假设插入的行的驱动程序ID为1,我希望该行的日志ID为1,但下次插入驱动程序ID为1的行时,我希望该行的日志ID为2 我怎样才能做到这一点 对于数据库,我使用的是PHPMyAdmin --------编辑----------- 这是我现在在PHP中的内容,但它说: 网页上:第1行“FinesCost”列的整数值不正确 我转储变量,得到如下结果:s

在我的数据库中,我有:

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

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

例如,假设插入的行的驱动程序ID为1,我希望该行的日志ID为1,但下次插入驱动程序ID为1的行时,我希望该行的日志ID为2

我怎样才能做到这一点

对于数据库,我使用的是PHPMyAdmin

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

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

网页上:第1行“FinesCost”列的整数值不正确

我转储变量,得到如下结果:string2 16 string2 16 string2 16,所以我不明白为什么它说的是不正确的整数值,为什么它说它们是未定义的,因为它们定义得非常清楚

在PHP错误日志中:[19-Jul-2013 10:44:18 Europe/Minsk]PHP注意:未定义变量:FinesCostP‌第336行C:\inetpub\wwwroot\hosting\Dan\JWT\drivers-log-send.php中的ost2 [19-Jul-2013 10:44:18 Europe/Minsk]PHP通知:未定义变量:TravelExpensesPo‌​第336行C:\inetpub\wwwroot\hosting\Dan\JWT\drivers-log-send.php中的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());
    }

}

一个快速的解决方案是使用子查询查找最大日志last log 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_RowID和p_DriverID是您传递以插入到表中的值。Coalesce函数将检查给定的值,如果该值为NULL,则将用第二个参数替换它,在本例中为两列添加一个主键

它应该会起作用

看看这个寻求帮助

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

编辑:填写其他答案

下面是插入数据的代码

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编辑器中打开了您的程序,在SQL查询的$FineCostPost2中找到了char。你必须改变它才能让它工作

在您的示例中,我可以用DriverID 2和logID1创建另一行吗?您使用的是什么DBMS?是的@davidevel这就是我希望能够实现的。@Danbyization试试我的答案它应该可以解决这个问题不使用Oracle uing PHPMYADMINS您不能编写SQL查询吗?是的,我可以,但是因为您提到了Oracle,我假设代码您发布的是针对oracle的,因此不会与PHP My Admin一起使用。@Danbyization我刚刚发现PHP My Admin实际上是MySQL,请尝试我的查询,我认为它可以正常工作,因为MySQL确实有一个合并函数,其他语法只是SQL@JafarKofahi我只是看了一下COALESCE,它也适用于MySQL,你说得对。但我不希望driverID是独一无二的,我也不希望logid是独一无二的,尽管不会,但这对夫妇将是独一无二的。这意味着你不能有两次DriverId2和logID2。主键约束将仅使用耦合,而不是每个列。你明白我的意思吗?我试过了,但我有一个错误只有一个自动列,它必须被定义为一个键。不要对它使用自动增量,只使用主键。你有没有试着复制一个正在工作的列,并将它粘贴到一个不工作的列上?
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;