2012-11-28 3 views
0

Possible en double:
Moving a row from one table to another (Insert value list does not match column list)MySQL Insérer :: MAX (FIELD) +1 - si nul

Pour un de mes inserts je donne les résultats suivants: (AOP/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;"; 

Fondamentalement, cela ne fonctionne pas comme il n'introduisait une valeur pour FixedFareId.

Ce que je veux faire est de régler la FixedFareId 1 supérieure à la valeur identifiant de tarif fixe le plus élevé, et si elle est nulle pour régler la FixedFareId à 1.

Je ne sais pas quel est le problème exactement le code mais je peux le voir est pas ramasser quoi que ce soit pour le FixedFareId que je me suit réponse:

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'); 

Fondamentalement deux inserts se produisent dans une seule requête, s'il n'y a rien dans la base de données FixedFareId doit être 1:

Donc le premier insert nee ds être:

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

le prochain insert serait:

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

La base de données est la suivante:

id

, FixedFareId, ShortPostcodeA, ShortPostcodeB, Fare, DayHalf, VehicleSystemId

id est auto-incrémenté, le fixedfareid doit être 1 si null, et +1 de la valeur max de fixedfareid sinon null.

+0

pouvez-vous poster le résultat de cette requête, 'DESC tblfixedfares'? –

Répondre

1

changer votre requête comme ceci:

  INSERT INTO tblfixedfares (SELECT NULL, IFNULL(MAX(FixedFareId), 0) + 1, '$fieldFrompc', '$fieldTopc', '$fieldDay', '1', 'Car' FROM tblfixedfares); 
+0

J'ai essayé, ça ne marche toujours pas. Il ne sélectionne pas la valeur MAX pour FixedFareId, c'est pourquoi le nombre n'est pas correct – nsilva

+0

Vous ne savez pas exactement ce que vous voulez dire – nsilva

+0

Trigger est utilisé lorsque vous voulez gérer des événements de table comme la mise à jour, l'insertion ou la suppression (http://dev.mysql.com /doc/refman/5.0/en/create-trigger.html) afin que vous puissiez ajouter un post/traitement de données pré – Anas

0

Peut-être que vous cherchez:

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

Par conséquent, si le MAX de FixedFareId est NULL, elle est traitée comme zéro, puis '1' est ajouté à lui, résultant en '1' si le champ est nul. (Puisque MAX (NULL) donne 'NULL').