検索

ホームページ  >  に質問  >  本文

テーブルが存在しない場合は、テーブルに挿入します

<p>ユーザーが回路にシリアル番号 (ユニット) を追加できるアプリケーションがあります。 2 つのテーブルの挿入クエリを変更して、セル ID がすでに存在するかどうかを確認しようとしています。存在しない場合は挿入したいのですが、存在する場合は新しいレコードを挿入したくありません。これに関連するSOで見つけた回答を検索して適用しようとしましたが、成功しませんでした。</p> <p>これは私たちの代コードです、 制御器</p> <pre class="brush:php;toolbar:false;">パブリック関数 AddNewCell() { if ($_SERVER['REQUEST_METHOD'] == 'POST') { $circuitId = $_POST["circuitId"]; $cellNum = filter_var($_POST["cellNum"], FILTER_SANITIZE_STRING); $toteId = $_POST["toteId"]; $posId = $_POST["posId"]; $stageCheckId = $this->GetStageIdByBatId($cellNum); if (empty($stageCheckId)) { echo json_encode("0"); } それ以外 { $cellId = $this->form->InsertNewCell($circuitId, $stageCheckId, $toteId, $posId); $this->wk->InsertCell($circuitId, $cellId, $cellNum, $toteId, $posId); エコー json_encode($cellId); } } }</pre> <p>编队モデル</p> <pre class="brush:php;toolbar:false;">パブリック関数 InsertNewCell($circuitId, $stageCheckId, $toteId, $posId) { $this->db->query("INSERT INTO tbl_Cell_Tote_Track (Circuit_Id, Stage_Check_Id, Tote_Id, Position_Id) VALUES (:cid, :scid, :tid, :pid)"); $this->db->bind(":cid", $circuitId); $this->db->bind(":scid", $stageCheckId); $this->db->bind(":tid", $toteId); $this->db->bind(":pid", $posId); $this->db->e​​xecute(); $this->db->query("SELECT TOP(1) Cell_Id FROM tbl_Cell_Tote_Track ORDER BY Cell_Id DESC"); $this->db->single()->Cell_Id を返します。 }</pre> <p>工作表モデル</p> <pre class="brush:php;toolbar:false;">パブリック関数 InsertCell($circuitId, $cellId, $cellNum, $toteId, $posId) { $this->db->query("SELECT Circuit_Num FROM tbl_Circuit_Track WHERE Circuit_Id = :cid"); $this->db->bind(":cid", $circuitId); $circuitNum = $this->db->single()->Circuit_Num; $position = $this->GetCellPos($toteId, $posId); $this->db->query("INSERT INTO tbl_OCV_Worksheet (Cell_Id, Circuit_Id, Circuit_Num, Position_Num, Serial_Num) VALUES (:clid, :cirid, :cn, :pn, :cnum)"); $this->db->bind(":clid", $cellId); $this->db->bind(":cirid", $circuitId); $this->db->bind(":cn", $circuitNum); $this->db->bind(":pn", $position); $this->db->bind(":cnum", $cellNum); $this->db->e​​xecute(); }</pre> <p>我尝试介して表の Cell_Id 列に唯一の束を追加します <code>$this->db->query("変更表 tbl_Cell_Tote_Track が唯一の (Cell_Id) を追加しました;</code> モデル関数に到達しますが、シーケンス番号入力セルを使用すると、やはり反復されます。</p> も試してみました。 <pre class="brush:php;toolbar:false;">パブリック関数 InsertNewCell($circuitId, $stageCheckId, $toteId, $posId) { $this->db->query("INSERT INTO tbl_Cell_Tote_Track (Circuit_Id, Stage_Check_Id, Tote_Id, Position_Id) SELECT $circuitId, $stageCheckId, $toteId, $posId WHERE NOT EXISTS(tbl_Cell_Tote_Track から Cell_Id を選択)"); $this->db->e​​xecute(); $this->db->query("SELECT TOP(1) Cell_Id FROM tbl_Cell_Tote_Track ORDER BY Cell_Id DESC"); $this->db->single()->Cell_Id を返します。 }</pre> <p>これで表の重複を防げるように思えましたが、先輩からこれは間違いだと言われました。私は SQL と PHP の初心者なので、あらかじめお詫びします。ご協力をよろしくお願いいたします。さらにコードを含める必要がある場合は、お知らせください。 </p>
P粉546138344P粉546138344476日前675

全員に返信(1)返信します

  • P粉436688931

    P粉4366889312023-09-06 15:11:58

    select ステートメントで where を設定すると、(select を使用して) 最後のコードを選択できます。例:

    リーリー

    そして、送信ユニットIDの関数パラメータを変更します。

    Cell_Id が自動インクリメンタルの場合は、別の列で制約を定義する必要があります。

    返事
    0
  • キャンセル返事