2013-07-18 2 views
0

В моей базе данных У меня есть:Добавить ценность в базу данных plus 1

ID строки - идентификатор водителя - идентификатор журнала.

Row ID является уникальным и автоматическим шагом. Я хочу, чтобы идентификатор журнала был уникальным для каждой строки с идентификатором драйвера.

Например, скажем, что строка вставлена ​​с идентификатором драйвера 1 Я хочу, чтобы эта строка имела идентификатор журнала 1, но в следующий раз, когда строка вставлена ​​с идентификатором драйвера 1, я хочу, чтобы у него был идентификатор журнала 2.

Как я могу это достичь?

By the way for database Я использую PHPMyAdmin.

---------------- ---------------------- Редактировать

Это то, что у меня есть в моем PHP сейчас, но он говорит:

на веб-странице: Неверное целочисленное значение: «» для столбца «FinesCost» в строке 1

и я сбросить переменные и получить это: строка (2) Строка «16» (2) «16» (2) «16», поэтому я не понимаю, почему она говорит неправильное целочисленное значение и почему она говорит, что они являются неопределенными, потому что они очень четко определены.

В журнале ошибок PHP: [19-июл-2013 10:44:18 Европа/Минск] PHP Примечание: неопределенная переменная: FinesCostPost2 в C: \ inetpub \ wwwroot \ hosting \ Dan \ JWT \ drivers-log- send.php on line 336 [19-июл-2013 10:44:18 Европа/Минск] PHP Примечание: Неопределенная переменная: TravelExpensesPo st2 в C: \ inetpub \ wwwroot \ hosting \ Dan \ JWT \ drivers-log-send .php на линии 336

/// PHP ВСТАВИТЬ DRIVER'S РЕКВИЗИТЫ INTO базы данных банка

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()); 
    } 

} 
+0

В вашем примере у меня есть другая строка с DriverID 2 и logID1? –

+0

Какие СУБД вы используете? –

+0

Да @DavidLevel, это то, что я хочу, чтобы быть в состоянии. – Danbyization

ответ

1

Добавить первичный ключ для двух столбцов.

Он должен сделать трюк.

Посмотрите на эту link за помощью

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

Не забудьте зайти в первый первичный ключ, потому что вы не будете нуждаться в этом больше нет.

EDIT: ПОЛНЫЙ С другой ответ

Вот код для вставки данных.

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, и я обнаружил, что char в $ FineCostPost2 в SQL-запросе найден «< 200c>». Вы должны изменить его, чтобы заставить его работать.

+0

Но я не хочу, чтобы идентификатор драйвера был уникальным, и я не хочу, чтобы логин был уникальным. – Danbyization

+0

Это не будет, но пара будет уникальной. Это означает, что вы не можете иметь дважды DriverId2 и logID2. Ограничение первичного ключа будет использовать только пара не для каждого столбца. Вы поняли, что я имею в виду? –

+0

Я пробовал, но у меня ошибка: «может быть только один автоматический столбец, и он должен быть определен как ключ» – Danbyization

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_RowID и p_DriverID являются значения, передаваемые для вставки в таблицу. Функция Coalesce проверит заданное значение, и если оно равно NULL, то оно заменит его вторым параметром, в этом случае 0

+0

Не использовать Oracle uing PHPMyAdmin – Danbyization

+0

Итак, вы не можете написать SQL-запрос? –

+0

Ну да, я могу, но потому, что вы упомянули оракул, я предполагаю, что код, который вы отправили для оракула, и поэтому не будет работать с PHP My Admin. – Danbyization