Extraction ds données d'une table vers une autre

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Extraction ds données d'une table vers une autre

par jalol » 17 nov. 2005, 17:22

Yeah ça marche ! :D
Merci beaucoup Zeus !

par zeus » 17 nov. 2005, 17:18

J'ai pas les yeux en face des trous aujourd'hui
Il ne faut pas de VALUES

Code : Tout sélectionner

INSERT INTO `test` (`nom`, `prenom`, `mail`) SELECT `nom`, `prenom`, `mail` FROM `abonnes_newsletter`

par jalol » 17 nov. 2005, 17:04

Tu avais oublié l'apostrophe fermante.

Après correction, voici ce que ça me donne :

Code : Tout sélectionner

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT `nom`, `prenom`, `mail` FROM `abonnes_newsletter`' at line 2

par zeus » 17 nov. 2005, 16:44

Non, c'est plutôt qu'il fallait enlever les parenthèses

Code : Tout sélectionner

INSERT INTO `test` (`nom`, `prenom`, `mail`) VALUES SELECT `nom`, `prenom`, `mail` FROM `abonnes_newsletter

par jalol » 17 nov. 2005, 16:31

Code corrigé :

Code : Tout sélectionner

INSERT INTO `test` (`nom`, `prenom`, `mail`) VALUES ((SELECT `nom`, `prenom`, `mail` FROM `abonnes_newsletter`))
Il manquait les parenthèses entourant la sous-requête, cela faisait une erreur de syntaxe. En tout cas, cette requête donne l'erreur :

Code : Tout sélectionner

#1136 - Column count doesn't match value count at row 1
Je pense que MySQL considère la sous-requête comme une seule et unique valeur. Il lui manque donc dans ce cas les valeurs pour le champs `prenom` et `mail`. On revient donc à ma requête de départ... :?

Re: Extraction ds données d'une table vers une autre

par zeus » 17 nov. 2005, 14:18

Tu fait une seule et unique requete pour sélectionner les valeurs à transferer. De plus, comme ton champ idAbonne est auto_increment, si tu ne lui donnes pas de valeur, il va gerer tout seul les incrémentations

Code : Tout sélectionner

INSERT INTO `abonne` (nom, prenom, mail) VALUES (SELECT `nom`, `prenom` `mail` FROM `abonnes_newsletter`)

Extraction ds données d'une table vers une autre

par jalol » 17 nov. 2005, 14:09

Bonjour à tous !

Voilà, j'ai 2 tables. La première contient les coordonnées complètes des utilisateurs :
Table `users`
`idUser` INT(11) PRIMARY KEY AUTO_INCREMENT
`nom` VARCHAR(255)
`prenom` VARCHAR(255)
`mail` VARCHAR(255)
`societe` VARCHAR(255)
`adresse` VARCHAR(255)

Dans la seconde, je veux juste avoir le nom, le prénom et le mail :
Table `abonne`
`idAbonne` INT(11) PRIMARY KEY AUTO_INCREMENT
`nom` VARCHAR(255)
`prenom` VARCHAR(255)
`mail` VARCHAR(255)

Je souhaite bien sûr transférer (copier) les données de l'une à l'autre, et de préférence uniquement en SQL. J'ai voulu faire cette requête :

Code : Tout sélectionner

INSERT INTO `test` VALUES ( (SELECT `idUser` FROM `abonnes_newsletter`), (SELECT `nom` FROM `abonnes_newsletter`), (SELECT `prenom` FROM `abonnes_newsletter`), (SELECT `mail` FROM `abonnes_newsletter`) )
Mais MySQL répond

Code : Tout sélectionner

#1242 - Subquery returns more than 1 row
Et je me dis "Evidemment, vu que je veux qu'il me mette tous les enregistrements". Y a-t-il un moyen de faire ce type de requête en boucle en SQL ou dois-je forcément passer par un script PHP?

Si jamais il y a une solution en SQL, est-il possible d'avoir en plus un idAbonne distinct?

Merci de votre aide :)