2017-04-24 4 views
0

同様に、私はこのinformationを含む行を持っています。非表示の列は、それが研究で見えるか(0)、そうでないか(1)を決定します。データベースに別の行と同じ情報を挿入する方法はありますか?

hidden number =1の行と同じ情報(特に同じ名前)を持つ新しい行を挿入したいとします。しかし、今、hidden number = 1IT-Melanieのような)のコンピュータの同じ情報を挿入すると、すでにそこにある行が「更新」されるだけで、新しいものは作成されません! (IT-Melanieのような)同じ名前の新しい行を作成する可能性はありますが、この更新なしで既存の行を挿入するにはいくつかの異なる情報がありますか?データベース内の行を複製する場合と同じですが、すべての情報が同じです。

私がここで見つけたと思うのは、JavaScriptの行が重複していると思います。私は2つの行を似たような時間情報を複数回挿入しようとすると、データベースに既に存在する行の更新だけが成功することはありません。

要約:データベースに既に存在するものと同じ名前の新しいコンピュータを挿入しますが、古いコンピュータはhidden number = 1と新しいコンピュータ= 0を挿入します。

質問:古い行を編集せずに同じcomputer_nameの2行を追加できますか?

例:

古い行:Computer_name = It_melanie xxxxx-xxxxxx-xxxxx-xxxxxx-xxxxx product_number = [...] hidden = 1

新しい行:Computer_name = It_melanie xxxxx-xxxxxx-xxxxx-xxxxxx-xxxxx product_number = [...] hidden = 0

Unique Key

//Get informations in the form and insert it into db 
    $location=$_GET['location']; 
    $dept=$_GET['dept']; 
    $jack=$_GET['jack']; 
    $computername=$_GET['computername']; 
    $productkey=$_GET['productkey']; 
    $model=$_GET['model']; 
    $vendor=$_GET['vendor']; 
    $serialnumber=$_GET['serialnumber']; 
    $macaddress=$_GET['macaddress']; 
    $status=$_GET['status']; 
    $starphone=$_GET['starphone']; 
    $intid=$_GET['intid']; 
    $did=$_GET['did']; 
    $software=$_GET['software']; 
    $query='insert into department(
    department, 
    location_id)values(
    "'.$dept.'", 
    "'.$location.'")'; 
    if(valid_query($query)){ 
    $message .= "Enregistrement a ete mis a jour<br>"; 
    }else{ 
      $message .= "Enregistrement n a pas ete mis a jour! S'il vous plait contacter le Departement TI IOS<br>"; 
    } 
    $query='insert into computer(
    computer_name, 
    product_key, 
    model, 
    serial_number, 
    status_id, 
    starphone, 
    inst_id, 
    did, 
    macaddress, 
    software_id, 
    hidden 
    )values(
    "'.$computername.'", 
    "'.$productkey.'", 
    "'.$model.'", 
    "'.$serialnumber.'", 
    "'.$status.'", 
    "'.$starphone.'", 
    "'.$intid.'", 
    "'.$did.'", 
    "'.$macaddress.'", 
    "'.$software.'", 
    0 
    )'; 
    if(valid_query($query)){ 
    $message .= "Enregistrement a ete mis a jour<br>"; 
    }else{ 
      $message .= "Enregistrement n a pas ete mis a jour! S'il vous plait contacter le Departement TI IOS<br>"; 
    } 
    $query="select dept_id from department where department='$dept' and location_id='$location'"; 
    $deptid=select_query($query); 
    $query="select computer_id from computer where computer_name ='$computername'"; 
    $computerid=select_query($query); 
    $query='insert into jack(
    jack_number, 
    dept_id, 
    location_id, 
    computer_id 
    )values(
    "'.$jack.'", 
    "'.$deptid.'", 
    "'.$location.'", 
    "'.$computerid.'")'; 
    if(valid_query($query)){ 
    $message .= "Enregistrement a ete mis a jour<br>"; 
    }else{ 
      $message .= "Enregistrement n a pas ete mis a jour! S'il vous plait contacter le Departement TI IOS<br>"; 
    } 

    $query='insert into computer_vendor(
    computer_id, 
    vendor_id 
    )values(
    "'.$computerid.'", 
    "'.$vendor.'")'; 
    if(valid_query($query)){ 
    $message .= "Enregistrement a ete mis a jour<br>"; 
    }else{ 
      $message .= "Enregistrement n a pas ete mis a jour! S'il vous plait contacter le Departement TI IOS<br>"; 
    } 
    $location=""; 
    $dept=""; 
    $jack=""; 
    $computername=""; 
    $productkey=""; 
    $model=""; 
    $vendor=""; 
    $serialnumber=""; 
    $macaddress=""; 
    $status=""; 
    $starphone=""; 
    $intid=""; 
    $did=""; 
+0

テーブル内の各列から一意の制約を削除する必要があります。これを追加することができます。 –

+0

コードに問題はありません。テーブルに問題があります。テーブルの一意の制約をチェックし、一意の主キーを確認します。 '隠された'がキーの一部であることを保証してください。あなたのコードがプライマリキー重複挿入の更新を引き起こしていることも間違いです。私はそれがちょうど誤りと思うだろう。 UPDATE、DELETE、またはupsertロジックを示唆する他のSQLは表示されません。 – JNevill

+0

私はそれがちょうど上記の新しい画像と関連していると思いますか? (ユニークキー) – Nexis

答えて

0

まず私のコード、列コンピュータ名がUNIQUEとしてマークされていないことを確認してください。
- ターミナルまたはcmdまたは任意のシェルを使用してMySQLに接続するには、テーブルがあるデータベースにログインします。そして、DESCRIBE <table_name>;を使用して値キーチェックと列に(mysql -u <mysql_user> -p <db_name>を実行すること)コンピュータ名の値がUNIである - これはそれがUNIQUEとしてマークされていることを意味します。例の結果:img
第二に、からUNIQUE制約を取り除きます。
- これを行うには(シェルを介してMySQLに接続していて、まだ同じデータベースにいる間に)ALTER TABLE <table_name> DROP INDEX computer_name;を使用してください。 第3に、あなたは成功しましたか?
-Again use DESCRIBE <table_name>;そしてUNIの値がKeyカラムにある場合は、再度ステップ2を実行します。

幸運。

+0

ありがとうございました – Nexis

+0

私は役に立ちました。必要があれば、[email protected]に私に連絡してください。 :) – XTard

+0

よろしくお願いします。 – Nexis

関連する問題