0

重複の可能性:
あるテーブルから別のテーブルに行を移動する(値リストの挿入が列リストと一致しない)

私の挿入物の1つには、次のものがあります:(PDO / MySQL)

   $this->sql = "INSERT INTO tblfixedfares NULL, SELECT NULL, IFNULL(MAX(FixedFareId), 0) + 1, '$fieldFrompc', '$fieldTopc', '$fieldDay', '1', 'Car') FROM tblfixedfares;
                    INSERT INTO tblfixedfares NULL, SELECT NULL, IFNULL(MAX(FixedFareId), 0) + 1, '$fieldFrompc', '$fieldTopc', '$fieldNight', '2', 'Car') FROM tblfixedfares;";

基本的に、これはの値を挿入していないため、機能していませんFixedFareId

私がやりたいのは、FixedFareIdを最大の固定運賃ID値より1大きい値に設定し、それがnullの場合はFixedFareIdを1に設定することです。

コードの問題が正確に何であるかはわかりませんが、次の応答が表示されるため、FixedFareIdに対して何も取得されていないことがわかります。

Error: SQLSTATE[21S01]: Insert value list does not match column list: 1136 Column count doesn't match value count at row 1SQL

INSERT INTO tblfixedfares VALUES (NULL, 'le675', 'le115', '11', '1', 'Car');
INSERT INTO tblfixedfares VALUES (NULL, 'le675', 'le115', '22', '2', 'Car');

基本的に、データベースに何もない場合、FixedFareIdは1である必要があり、1つのクエリで2つの挿入が発生します。

したがって、最初の挿入は次のようにする必要があります。

INSERT INTO tblfixedfares VALUES (NULL, **1**, 'le675', 'le115', '11', '1', 'Car');
INSERT INTO tblfixedfares VALUES (NULL, **1**, 'le675', 'le115', '22', '2', 'Car');

次の挿入は次のようになります。

INSERT INTO tblfixedfares VALUES (NULL, **2**, 'le675', 'le115', '11', '1', 'Car');
INSERT INTO tblfixedfares VALUES (NULL, **2**, 'le675', 'le115', '22', '2', 'Car');

データベースは次のとおりです。

id、FixedFareId、ShortPostcodeA、ShortPostcodeB、Fare、DayHalf、VehicleSystemId

idは自動インクリメントであり、fixedfareidはnullの場合は1、nullでない場合はfixedfareidの最大値の+1である必要があります。

4

2 に答える 2

1

次のようにクエリを変更します。

          INSERT INTO tblfixedfares (SELECT NULL, IFNULL(MAX(FixedFareId), 0) + 1, '$fieldFrompc', '$fieldTopc', '$fieldDay', '1', 'Car' FROM tblfixedfares);
于 2012-11-28T14:47:15.093 に答える
0

おそらくあなたが探しているのは:

INSERT INTO tblfixedfares SELECT NULL, COALESCE(MAX(FixedFareId),0) + 1, etc..

したがって、FixedFareId の MAX が NULL の場合は 0 として扱われ、続いて「1」が追加され、フィールドが null の場合は「1」になります。(MAX(NULL) は「NULL」を生成するため)。

于 2012-11-28T15:10:03.390 に答える