Database 向数据库中添加值加1
在我的数据库中,我有: 行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将驱动程序的银行详细信息插入银行数据库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
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', '$FinesCostPost2' , '$TravelExpensesPost2' ,'$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;