2017-05-23 13 views
0

私はテーブルSQLを持っており、Excelファイルから入力します。問題は多くのフィールドが繰り返されることです。例:変更依頼SQL

FOURNITURE  MFC  SERIE 
FOURNITURE  MFC  SERIE 
FOURNITURE  MFC  SERIE 

ここで私のテーブルには、1行しか見つかりません。それはすべての残りの部分を飛び越えます。しかし、私はすべての行を取得する必要があります。

私の要求は次のとおりです。

if ($articleid == 'DIEPRESTATION' || $articleid == 'DIEDIVBIEN' ||$articleid =='DIEDIVERS') 
{ 
    if(!($this->_db->query("INSERT INTO `article` (`ID_Article`, `Designiation`, `Ident`, `ID_LRU`) VALUES ('".$articleid."', '".$designation."', '".$ident."', '".$IdLRU."');"))) 
{ 
     if ($LRU != 'new') 
     { 
      return $this->_db->query(" UPDATE `FLOOSE`.`article` SET `ID_LRU` = 
      '".$IdLRU."' WHERE `article`.`ID_Article` = '".$articleid."' AND 
      `article`.`Designiation` = '".$designation."' AND 
      `article`.`Ident` = '".$ident."' LIMIT 1 ;"); 
     } 
     else { 
       return false; 
      } 
     } else{ 
      return TRUE; 
     } 
    } 

私は2つのテーブルの列に一意キー制約を持っていると思います。 screen sheet of the structure of my table

どのように変更したり、すべての行を回復するためのテストをすることができますか?私は一意のキー制約を削除しますか? ありがとうございます。

+0

こんにちは、私はあなたの質問を理解していません。あなたは、*すべての行を取得する必要があると書いています*。 'SELECT'クエリがそれを行います。しかし、あなたのサンプルコードは 'UPDATE'と' INSERT'クエリを示しています。あなたのDBMS内のすべての一致する行を 'UPDATE'しようとしていますか?もしそうなら、なぜあなたの 'UPDATE'クエリに' LIMIT 1'句が含まれていますか? –

+0

重複制約エラーで失敗していますか?もしそうなら、最も簡単なオプションはID_Articleを主キー(IntegerとAutoIncrement)にすることです。 – waterloomatt

+0

私のコードは、他のテーブルとの結合があるので、UPDATEとINSERTのクエリを表示します。 LRUが古いと判明した場合、それはちょうどUPDATEになります。 – Nazly

答えて

1

はい、列に一意の制約があります。さらに、ID_ArticleDesigniationのコンポジットはプライマリキーです。これは定義ごとにも一意です。

あなたべき

  1. は、その主キーを削除します(規則に固執するidという名前を付けます)ALTER TABLE article DROP PRIMARY KEY;
  2. は、別のフィールドを追加し、自動インクリメントを持つ主キーとして設定:ALTER TABLE article ADD id INT PRIMARY KEY AUTO_INCREMENT;
+0

新しいフィールド私はまた、私のコードPHPで要求に追加しますか?一意制約を削除して挿入を実行すると、それは機能しますか? – Nazly

+1

私は私の答えを編集しました。すべてのデータを削除して再挿入する必要はありませんが、既存のテーブルに自動インクリメントの主キーを追加することもできます。 –

関連する問題