Jump to content
Sign in to follow this  
Boumbadaboum

recopier des champs SQL

Rate this topic

Recommended Posts

Bonjour,

Voilà j'ai du mal à trouver comment exécuter deux requetes SQL. Je suis sûr que pour quelqu'un d'expérimenté ce serait simple.

J'explique.

1) J'ai une table avec un champ 'libelle'. Je veux créer un autre champ qui reprenne pour chaque tuple exactement le contenu du champ 'libelle' déjà existant.

2) J'ai deux table qui ont un champ en commun. Je veux recopier le contenu d'un champ de la table 1 dans un nouveau champ de la table 2, pour le tuple correspondant.

Je me vois mal recopier le contenu de chaque champ, alors si quelqu'un a la solution, je lui dit merci d'avance.

Share this post


Link to post
Share on other sites

Salut et bienvenue sur le hub ;)

C'est quoi un tuple ? :blink:

1) J'ai une table avec un champ 'libelle'. Je veux créer un autre champ qui reprenne pour chaque tuple exactement le contenu du champ 'libelle' déjà existant.

Si tu as créé le champ dans MyAdmin, il te suffit de faire la requète :

UPDATE nom_table SET nouveau_champ = libelle

en remplaçant évidemment nom_table et nouveau_champ par les noms que tu as donné...

Pour la 2 tu pourrais faire un petit script rapide ;)

Share this post


Link to post
Share on other sites

Ah merci à toi, je viens d'essayer ta premier solution ça a marché tt de suite.

Un tuple sauf erreur de ma part c'est une ligne de ta table.

Mettons t'as une table voiture avec 10 champs, chaque enregistrement c'est un tuple.

Ne me frappez pas si je me trompe.

Tu as une idée pour le "petit script"?

Il doit bien y avoir une requete sql qui permet ça je pense.

Merci déjà en tout cas pour la première réponse

Share this post


Link to post
Share on other sites
1) J'ai une table avec un champ 'libelle'. Je veux créer un autre champ qui reprenne pour chaque tuple exactement le contenu du champ 'libelle' déjà existant.

Une fois ton nouveau champ créé et puis tu fais un Update.

UPDATE table T SET T.autreChamp=T.libelle

Ca me semble assez évident jusque là.

2) J'ai deux table qui ont un champ en commun. Je veux recopier le contenu d'un champ de la table 1 dans un nouveau champ de la table 2, pour le tuple correspondant.

<{POST_SNAPBACK}>

J'imagine que tu as un identifiant commun dans les 2 table.

Donc tu ajoutes le champ dans la table2 et tu fais :

UPDATE table1 T1, table2 T2 SET T2.champ=T1.champ WHERE T1.id=T2.id

Si ça ne donne pas le résultat désiré, n'hésite pas à revenir. Et au passage, n'oublie pas de faire un backup avant ;)

C'est quoi un tuple ?  :blink:

<{POST_SNAPBACK}>

Un enregistrement.

Edited by erwinol

Share this post


Link to post
Share on other sites
Un tuple sauf erreur de ma part c'est une ligne de ta table.

Mettons t'as une table voiture avec 10 champs, chaque enregistrement c'est un tuple.

Ne me frappez pas si je me trompe.

<{POST_SNAPBACK}>

T'es sauf pour cette fois, c'est correct !

Share this post


Link to post
Share on other sites

Un tuple c'est , en mathématique, un élément d'un produit cartésien... générlameent, lorsqu'on parle d'une base de données, c'est simplement un ligne d'une table composée de plus d'un champ. En anglais c'est appelé un n-uplet ...

Pour en revenir au problème de Boumbadaboum,

1> je suppose que tu veux le "recopier" dans une autre table, car dans la même table cela n'a pas trop de sens...En fait je vais répondre à ta deuxième question également, c'est typiquement dans ce genre de cas qu'il faut créer une relation entre les tables. Sous mySQL pas de moyen de contraindre tes relations entre les table (pas de procédures stockées,...) , mais pour une requête SELECT tu as la clause JOIN .. par exemple :

SELECT table2.*, table1.libelle AS libelle FROM table2 LEFT OUTER JOIN table1 ON table2.idlibelle = table1.idlibelle

Plus d'aide sur les JOIN : http://www.w3schools.com/sql/sql_join.asp

*EDIT* Pardon pour la redite ;D je rédigeais ma réponse et quelqu'un m'a devancé ;D

Edited by TheRec

Share this post


Link to post
Share on other sites

Ok merci j'essaye ça dès que j'ai fini mes crèpes. Je vous dit le résultat.

au passage, n'oublie pas de faire un backup

C'est quoi un backup?

Tu veux dire une sauvegarde au cas ou la table grille?

J'en ai déjà fait une demi douzaine avant et je les ai expédié un peu partout sur mes boites mail et d'autres pc lol

Parano? Qui a dit ça?

Bon je vous dis si ça a marché merci.

Share this post


Link to post
Share on other sites

Je n'ai vonlontairement pas parlé d'UPDATE, recopier les champs est également une possibilité, mais pour être franc je ne te conseille pas ce procédé à moins que tes tables soient situées sur 2 bases de données distinctes et qu'elle doivent pouvoir être indépendantes.

Les relations servent (pas uniquement...il y a évidemment une notion d'abstration aussi, ...) à éviter les répétions de données qui sont généralement sources d'erreurs et de problèmes lors de changement manuel dans les champs. Bref à toi de juger de l'importance de l'homogénéité de tes données.

*EDIT* On est jamais assez parano dans le monde de l'informatique...

Edited by TheRec

Share this post


Link to post
Share on other sites

Bon alors voilà j'ai fini mes crèpes je reprend.

Je viens de tester cela pour la deuxième requête (première résolue donc):

UPDATE definitions, annuaire SET annuaire.categorie = definitions.categorie WHERE definitions.libelle = annuaire.libelleDef.

J'obtiens:

#1064 - You have an error in your SQL syntax near '

annuaire SET annuaire.categorie = definitions.categorie WHERE definitions.libel' at line 1

Le but est donc de copier le contenu du champ categorie de la table definition dans le champ categorie de la table annuaire.

ça vous dit quoi? (ok je m'attend à un truc du genre "ta requête vaut deux balles, t'as pas vu la grosse tache en plein milieu, vas dormir et tout... mais bon je persévère ! :D )

Merci d'avance

Share this post


Link to post
Share on other sites

Bon après avoir répondu naïvement au début, je me suis mis à réfléchir... Moi je veux bien t'aider à faire ce que tu veux, mais est-ce vraiment une solution ? Je vois déjà pas l'intérêt de faire deux colonnes avec les mêmes informations, et je dirais "encore moins recopier les infos dans une autre table"... Pourquoi tu fais ça ? Comme l'a dit quelqu'un avant moi, au moment d'aller chercher tes infos tu peux les piocher dans plusieurs tables, pour que tu te retrouves à la fin avec les bons résultats, donc les recopier dans une autre table, est-ce vraiment la meilleure solution ?

Share this post


Link to post
Share on other sites

Bien en fait le résultat souhaité est le suivant:

Quand une définition est sélectionnée (c'est pour un dico), des liens en rapport s'affichent.

Les définitions sont dans la table Definition, les liens dans la table Annuaire.

Je peux trier les définitions par catégorie.

Mais maintenant je veux trier aussi les liens de l'annuaire par catégorie pour une nouvelle rubrique du site (pas en ligne encore).

Comme les liens comportent un libelle commun avec la table definitions la catégorie de la définition "satellite" est la même que pour les liens "satellite" de la table annuaire.

Donc si je ne veux pas recopier pour chaque tuple de la table annuaire le contenu du champ catégorie du tuple correspondant de la table definitions, je dois trouver la bonne requête qui va le faire directement.

C'est tout.

Maintenant si vous avez une solution révolutionnaire à me proposer j'écoute hein.

Share this post


Link to post
Share on other sites

Si tu as un lien entre les deux tables, ce que tu sembles dire, ça ne pose pas de problèmes... Tu peux donner la structure exacte de ta BDD, avec les colonnes en commun ?

C'est lors de la recherche des résultats que tu auras une requète sur plusieurs tables...

Share this post


Link to post
Share on other sites

Bien en fait je ne vais pas détailler toute la structure des deux tables ça me semble fastidieux.

Voila pour les champs commun entre la table definitions et la table annuaire:

- definitions.libelle = annuaire.libelleDef (pas le même nom de champ mais même contenu, est-ce un prb?)

- definitions.categorie = annuaire.categorie.

avant l'id des liens étaient le même que l'id des définitions mais je vais trouver une autre relation avec un nouveau champ déjà créé.

Donc la question est bien de transvaser les catégories de la table definitions vers la table annuaire en sachant que le point commun entre chaque tuple est le contenu des champs libelle (table definitions) et libelleDef (table annuaire).

C'est mon premier site dynamique soyez indulgent svp :fou:

Share this post


Link to post
Share on other sites

Bon sinon rq j'en ai pas pour trois heures:

Je fais un select de tous les libelles de la table definitions pour une categorie et j'insère ensuite la categorie pour tous les libelleDef ayant le même contenu dans la table annuaire.

Y'a que 8 catégories.

Mais bon il doit y avoir une requête pour faire ça d'un coup.

Share this post


Link to post
Share on other sites

Le fait que tu n'ai pas le même nom de champs (colonne) ne pose pas de problème pour la relation, tant que tu déclare cette colonne comme clé étrangère, ou clé primaire selon le cas.

Maintenant décrire ta base de données est assez important dans la mesure ou la structure inluence la/les requêtes que nous alons te proposer...si tu veux faire rapide il y a ce programme pour la modélisation : http://www.fabforce.net/dbdesigner4/

C'est gratuit et pas très compliqué. Cela nous aidera beaucoup je pense...

*EDIT*

Je viens de relire un peu l'ensemble du post, en fait, ce que tu souhaite réaliser avec tes définition c'est réaliser une relation plusieurs à plusieurs ou n à n ... Tu devras donc passer par une table intermédiraire du type :

| idMot | idMotProche |

--------------------------

| 1 | 23 |

| 3 | 12 |

| 1 | 5 |

idMot et idMotProche sont en fait liés à la même table, on relie des tuples de la même table entre eux...

Maintenant cette table sera générée par ton application, les enregistrement peuvent être réciproques au moment de récupérer les mots proches : 1 -> 23 et 23 -> 1 par exemple...

Si tu travail exculsivement sur des mots proche orthographiquement tu peux utiliser des algorithmes de compraison de mots aulieu de faire la correspondance manuellement par cette table intermédiaire. C'est à voir, tout dépends du type de mot a "rapprocher" :D

PS: Sorry pour le long EDIT...

Edited by TheRec

Share this post


Link to post
Share on other sites

PS: Sorry pour le long EDIT...

Bah non c'est sympa mais bon j'ai rien compris.

J'en reviens pas que ça soit si long pour une requête alors que pour la première des deux, ça a été réglé du premier coup. :o

En tout cas félicitations, ça marche webmaster-hub, on a des réponses :-)

Edited by Boumbadaboum

Share this post


Link to post
Share on other sites

- definitions.libelle = annuaire.libelleDef (pas le même nom de champ mais même contenu, est-ce un prb?)

En fait ce que tu pourras faire quand tu voudras afficher les sites... Je pense que tu auras dans ta page de la définition la variable $libelle qui correspondra à la définition ? Il te suffira juste de faire un

SELECT url FROM annuaire WHERE libelleDef = $libelle

Il te faut quoi d'autre en fait ?

Share this post


Link to post
Share on other sites

Bah je veux bien comprendre ce que sont les index et à quoi ils servent, quand les utiliser etc... parce que je suis en train de refaire la base au propre et je me posais la question justement :lol:

Je veux bien un chalet en bois, un jardin, quelques poules, un chien ou deux, un percheron, une petite piscine, des sapins aussi.

Sinon ça va, merci :whistling:

Share this post


Link to post
Share on other sites

Oui plus sérieusement:

J'utilise la requête ci-dessous pour remplir les champs catégories de ma table annuaire

UPDATE `annuaire` SET `categorie` = 'sociale' WHERE `libelleDef` = 'ambiance' ;

Bon comme j'ai plusieurs champs libelleDef qui ont le même contenu je fais 5 ou 6 tuples à chaque fois.

Mais tout de même à chaque fois je dois copier coller la requete et changer le libelleDef du WHERE (c'est clair?)

Donc je voudrais en une seule grosse requete mettre à jour toute la table

du genre:

UPDATE `annuaire` SET `categorie` = 'sociale' WHERE `libelleDef` = 'ambiance' OR 'libelleDef'='mars' OR 'libelleDef'='navette' etc....

Bon, mais c'est quoi la bonne requête?

Share this post


Link to post
Share on other sites

Donc la c'est plus une question c'est un cours sur les systèmes de bases de données relationnelles que tu veux... ça doit se trouver ;D

http://www.commentcamarche.net/

Sous la rubrique Bases de données tu les conceptes fondamentaux dont tu as besoin sous "Initiation" et "Modèle relationnel"...

PS+EDIT : Je continue à dire que une représentation graphique de ta base nous serait utile...

Edited by TheRec

Share this post


Link to post
Share on other sites

UPDATE `annuaire` SET `categorie` = 'sociale' WHERE `libelleDef` in ('ambiance','mars','navette')

;)

Dan

Share this post


Link to post
Share on other sites

Donc la c'est plus une question c'est un cours sur les systèmes de bases de données relationnelles que tu veux...

Je suis vexé :boude:

non je rigole, merci pour tout et je vais approfondir la théorie.

Edited by Boumbadaboum

Share this post


Link to post
Share on other sites

Bah..pas de quoi se vexer :D

Dan à la rescousse, comme d'hab :) On le remerie jamais assez alors : MERCI !

Toutefois, Boumbadaboum, si tu dois effectuer de telles opérations c'est que il a un problème d'abstraction dans la structure de ta base de données, avoir des données redondantes dans une base n'est pas la solution la plus efficace...Mais c'est "tolérable" (ne soyons pas plus royaliste que le roi..) pour une application d'envergure raisonnable...

Bonne chance dans tes futures aventures de "base-de-donnée-esques" ;) Et surtout bonne nuit ! (Non mais c'est pas des heures pour être debout ça...tantpis, je suis assis de toute façon... :) )

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...