2009-07-10 6 views
0

J'ai une table:Insérer « même numéro » des lignes dans une table existante dans MySQL

+----------------+--------------+------+-----+---------+----------------+ 
| Field   | Type   | Null | Key | Default | Extra   | 
+----------------+--------------+------+-----+---------+----------------+ 
| fooID   | int(11)  | NO | PRI | NULL | auto_increment | 
| fooDetails  | varchar(200) | YES |  | NULL |    | 
| fooListingID | int(10)  | YES |  | NULL |    | 
| fooStatus  | tinyint(4) | YES |  | 0  |    | 
+----------------+--------------+------+-----+---------+----------------+ 

Je voudrais fusionner les données d'une table similaire avec ce tableau, mais je voudrais que les données à une alternance de façon que les données existantes dans cette table seront toutes bizarres "fooID" et les nouvelles insertions seront toutes les mêmes "fooID".

Des idées?

+2

Cela sent le début d'une très mauvaise idée. Pourquoi voudriez-vous faire cela? Il vaudrait mieux ajouter une autre colonne si vous voulez stocker un attribut de cette ligne plutôt que de vous fier à une astuce obscure comme stocker des informations dans le statut impair/pair de la colonne d'identité. Si vous pouviez expliquer pourquoi vous voudriez faire cela, quelqu'un pourrait être en mesure d'offrir une meilleure solution au problème sous-jacent. – JohnFx

Répondre

3

J'ai interprété votre problème que vous faites pour faire tous les fooIDs existants étrange, puis se fondre dans cette table de nouvelles, même fooIDs.

Vous pouvez accomplir cela assez facilement:

#first make all the existing ids odd 
UPDATE oldtable SET fooID=fooID*2-1; 

#now insert rows from the other table, making sure the ids are even  
INSERT INTO oldtable (fooID,fooDetails,fooListingID,fooStatus) 
    SELECT fooID*2,fooDetails,fooListingID,fooStatus FROM newtable; 
+0

+1 L'idée exacte que j'ai eu :) –

+0

A fonctionné comme prévu. Je vous remercie. – user44585

1

Vous pouvez insérer le résultat d'une instruction select. Utilisez modulo pour ids en alternance:

INSERT INTO NewTable 
SELECT column1, column2 
FROM OldTable 
WHERE NOT id % 2 
+0

Pour les lignes paires seulement, vous voudriez "WHERE id% 2" – mkb

+2

Cette techique perd tous les autres rangs de OldTable, je ne suis pas sûr que c'est ce que l'OP voulait? –

Questions connexes