Guest meeeuuuhhh Posté 14 Novembre 2005 Posté 14 Novembre 2005 Bonjour à tous, Je débute avec mysql et vu que je me prend la tête avec une requête, je me suis dit que l'aide de quelques webmasters expérimentés serait la bienvenu. Comme l'on m'a parlé de ce forum, je m'y suis inscrit et voilà La situation est la suivante :- J'ai une table 'domaines' et une table 'annuaire'. - Dans la table 'domaines' j'ai un champ `site`. - Dans la table 'annuaire' j'ai aussi un champ `site` en commun avec celui de la table 'domaines' mais dans cette table, le champs `site` peut avoir la même valeur pour plusieurs tuples. - Chaque tuple de la table 'domaines' a un id. - La table 'annuaire' possède un champ 'idSite'. Ma question est la suivante: Je souhaite que chaque tuple de la table 'annuaire' voit la valeur du champs 'idSite' prendre la valeur de l'id du tuple de la table 'domaines' dont le champ 'site' à la même valeur. Comme un exemple vaut mieux qu'un long discours : - Dans la table 'domaines' j'ai le tuple : id = 65 site = google - Dans la table 'annuaire' j'ai 7 tuples dont le champ site=google. Je voudrais donc que ces 7 tuples prennent la valeur 65 pour le champs idSite. Si vous avez la solution, je vous serais reconnaissant de bien vouloir me l'indiquer parce que je suis sur ce problème depuis 12h00 et je craque un peu. Merci d'avance
NorSeb Posté 14 Novembre 2005 Posté 14 Novembre 2005 Salut, La solution consiste à faire une requète du genre : UPDATE annuaire SET idsite=65 WHERE site='google' Par contre, il faut que tu prenne garde à la construction de ta base de données, notamment au niveau de la redondance d'informations. A quoi te sert-il d'avoir le nom du site dans les deux tables ?
Guest meeeuuuhhh Posté 14 Novembre 2005 Posté 14 Novembre 2005 Merci NorSeb pour ta réponse Ceci dit la réponse est un peu trop simple. Dans l'exemple je cite le cas d'un tuple ayant la valeur 65. Mais j'ai 300 tuples dans la table domaines et 700 dans la table site. Je voudrais donc que tous les tuples de la table sites prennent la valeur de l'id du tuple de la table domaines ayant la clef étrangère 'site' en commun, comme expliqué ci-dessus (il n'y a que le "tous les tuples" que je n'avais pas précisé). Pour la redondance de l'informations, tu fais bien de me le rappeler mais là ce n'est pas mon souci premier vu que je débute et maîtrise mal mysql, c'est plus simple pour moi de multiplier les tables.
Guest meeeuuuhhh Posté 14 Novembre 2005 Posté 14 Novembre 2005 Une autre solution consiste à attribuer un idSite différent pour chaque enregistrement de la table annuaire ayant la même valeur dans le champ site. exemple: J'ai 3 tuples dans la table annuaire avec comme valeur du champ site 'bob' , 'marcel' et 'jack. Chacun de ces enregistrement prend un idSite différent (mettons 4, 5 et 6 Par contre, toujours dans la table annuaire j'ai 5 enregistrement dont la valeur du champ site est 'éric'. Ces 5 enregistrement prennent comme idSite la valeur 7). Cela évite deux tables c'est un fait, mais pour la requête, je n'y arrive pas.
Portekoi Posté 14 Novembre 2005 Posté 14 Novembre 2005 Bonjour, Bien au contraire, si tu débutes, cela doit devenir ton soucis premier de faire les choses correctement dès le départ Il est toujours plus difficile ensuite de perdre les mauvaises habitudes. Pour ton problème, tu dois "éclaicir" ta base : 1 Table domaine avec un champ id et un champ nom 1 Table annuaire avec un champ id et un champ nom 1 Table domaine_annuaire avec le champ id de la table domaine et le champ id de la table annuaire. Ainsi, pas de redondance d'informations. Pour y parvenir, tu dois faire un script en php avec une requete SQL. Portekoi
Guest meeeuuuhhh Posté 14 Novembre 2005 Posté 14 Novembre 2005 Bonjour Portekoi, Tu as raison pour ce qui est des bonnes habitudes. Par contre il me semble que dans ton exemple tu rajoutes encore une table. Le mieux serait que je trouve la requête pour réussir ce que j'explique dans le message qui précède le tiens. Merci d'avance
Portekoi Posté 14 Novembre 2005 Posté 14 Novembre 2005 Re, Oui, j'ai rajouté une table qui t'évite d'avoir à en modifier 2 Pour la requête, c'est celle de NorSeb à savoir : UPDATE annuaire SET idsite=65 WHERE site='google' Le but étant de la mettre dans une boucle PHP. Portekoi
Guest meeeuuuhhh Posté 14 Novembre 2005 Posté 14 Novembre 2005 (modifié) Est-tu certains de la réponse d'avoir pris en compte la réponse que j'ai faite à NorSeb, Portekoi? Parce qu'avec cette requête, je ne peux pas mettre à jour tous les champs de la table annuaire d'un coup en donnant la même valeur au champ idsite pour tous les tuples qui ont la valeur site en commun. C'était juste un exemple le tuple google. **edit** c'est juste une requête sql à placer dans le phpmyadmin que je voudrais Modifié 14 Novembre 2005 par meeeuuuhhh
Portekoi Posté 14 Novembre 2005 Posté 14 Novembre 2005 "meeeuuuhhh", si tu n'as pas les bases, comment veux tu comprendre ce que je te donne comme solution ? Tu dois faire un script php car Mysql ne supporte pas les requêtes imbriquées. Je ne sais pas comment le dire autrement. Cadeau : http://www.phpdebutant.org/ Portekoi
Guest meeeuuuhhh Posté 14 Novembre 2005 Posté 14 Novembre 2005 Merci Portekoi pour ta sollicitude J'ai une dizaine de bouquins sur phpmysql, alors phpdebutant, ça ne me motive pas. Je pense qu'il doit bien y avoir une requête qui permette d'attribuer un id commun à tous les tuples d'une table ayant un champ en commun. C'est ça que je voudrais et que je recherche.
Portekoi Posté 14 Novembre 2005 Posté 14 Novembre 2005 ReRe, Je ne peux pas t'aider plus. Un débutant qui ne veut pas apprendre, c'est la première fois que je vois ca. Bon courage Portekoi
Guest meeeuuuhhh Posté 14 Novembre 2005 Posté 14 Novembre 2005 Bon et bien tant pis J'ai dit que je suis débutant, ça ne veut pas dire que je ne sais pas faire un " UPDATE annuaire SET idsite=65 WHERE site='google' " Je demandais juste un peu d'aide pour une requête plus complexe, pas un cours sur PHP ni un relookage de ma base de donnée. Mais je vous remercie quand même de m'avoir répondu.
NorSeb Posté 14 Novembre 2005 Posté 14 Novembre 2005 Je reprend le train en marche... Ceci dit la réponse est un peu trop simple.Dans l'exemple je cite le cas d'un tuple ayant la valeur 65. Mais j'ai 300 tuples dans la table domaines et 700 dans la table site. Je voudrais donc que tous les tuples de la table sites prennent la valeur de l'id du tuple de la table domaines ayant la clef étrangère 'site' en commun, comme expliqué ci-dessus (il n'y a que le "tous les tuples" que je n'avais pas précisé). A priori tu ne peut pas faire ca en une seule requète... Du moins pas avec mysql D'où la réponse de Portekoi : un script php qui fait un recence les sites de la table "domaines" puis qui modifie les enregistrements correspondant de la table "annuaire". Pour la redondance de l'informations, tu fais bien de me le rappeler mais là ce n'est pas mon souci premier vu que je débute et maîtrise mal mysql, c'est plus simple pour moi de multiplier les tables. Pour avoir fait une école d'informatique je peux t'affirmer que ca devrais être ta premiere priorité ! En effet, la premiere chose que l'on apprend est d'apporter la plus grande importance à la préparation du projet (l'analyse) plutôt qu'au projet lui même. Ceci pour la simple et bonne raison qu'une erreur d'analyse est plus facile à corriger au départ, qu'en cours de développement (comme tu peux d'ailleurs t'en rendre compte). La différence de "cout" (en temps ou en argent comme tu veux) est de l'ordre de 1 pour 1000.
Guest meeeuuuhhh Posté 14 Novembre 2005 Posté 14 Novembre 2005 (modifié) Merci NorSeb d'avoir repris le train en marche. Nonobstant l'analyse du projet, je vais reposer ma question d'une manière beaucoup plus simple, parce que je serais très étonné qu'il n'y ait pas une requête sql permettant de faire cette chose ci : J'ai donc ma table 'annuaire' (la table 'domaine' a pris feu elle n'existe plus). Dans cette table j'ai 500 tuples. Plusieurs tuples ont la même valeur pour le champs 'site'. Je voudrais que tous les tuples ayant la même valeur pour le champs 'site' prennent la même valeur pour le champs idSite ou une valeur unique s'ils n'y a pas d'autre tuples à avoir une valeur similaire à la leur pour le champs 'site'. Autremement dit "comment attribuer un même id à plusieurs tuples d'une même table ayant la même valeur pour un champ donné"? C'est forcément possible un truc comme ça, j'avais dû mal poser la question. Modifié 14 Novembre 2005 par meeeuuuhhh
NorSeb Posté 14 Novembre 2005 Posté 14 Novembre 2005 Autremement dit "comment attribuer un même id à plusieurs tuples d'une même table ayant la même valeur pour un champ donné"? Autrement dit, je vois pas. Tu es obligé de grouper les enregistrements (ou tuples) ayant la même valeur pour le champ "site", puis pour chaque groupe, d'attribuer une valeur au champ "idsite". Or, cette derniere action nécessite une requete (UPDATE) par valeur de "idsite".
Guest meeeuuuhhh Posté 14 Novembre 2005 Posté 14 Novembre 2005 Je n'ai rien contre les requêtes UPDATE personnellement hein... Je suis en train d'effectuer les recherches mais bon ça doit quand même pas être sorcier !
NorSeb Posté 14 Novembre 2005 Posté 14 Novembre 2005 e suis en train d'effectuer les recherches mais bon ça doit quand même pas être sorcier ! Ben si justement Il faut faire autant d'Update par groupe... donc c'est impossible en une seule requète.
Guest meeeuuuhhh Posté 14 Novembre 2005 Posté 14 Novembre 2005 (modifié) Sinon pour mon histoire de recopiage de champs entre deux tables ayant un champ en commun,j 'essaie ça en ce moment : UPDATE domaines, sites SET domaines.idSite= sites.id WHERE domaines.site = sites.site et j'obtiens' #1064 - You have an error in your SQL syntax near ' sites SET domaines.idSite = sites.site WHERE domaines.site = sites.site' at line 1' Modifié 14 Novembre 2005 par meeeuuuhhh
NorSeb Posté 14 Novembre 2005 Posté 14 Novembre 2005 (modifié) Oui c'est normal, tu ne dois pas pouvoir faire un update sur deux tables... [edit]Tiens... non, tu peux. Au temps pour moi[/edit] Modifié 14 Novembre 2005 par NorSeb
Guest meeeuuuhhh Posté 14 Novembre 2005 Posté 14 Novembre 2005 Non mais je veux faire un update que dans le champ idSite de la table domaines. J'obtiens la même erreur en faisant UPDATE domaines SET...
NorSeb Posté 14 Novembre 2005 Posté 14 Novembre 2005 Tu es sur que le nom de la table est correct ? Tu fais ca directement avec PhpMyAdmin ?
Guest meeeuuuhhh Posté 14 Novembre 2005 Posté 14 Novembre 2005 oui j'ai bien vérifié, peut-être est-ce un problème de quotes. J'écris la requête dans le champ sql de phpMyadmin.
Guest meeeuuuhhh Posté 14 Novembre 2005 Posté 14 Novembre 2005 je viens d'essayer celle-ci UPDATE `domaines` , SET domaines.idSite' = 'sites.id' WHERE domaines.site' = 'sites.site' Pour les quotes j'ai essayé plein de variantes, alors je ne crois pas que le problème vienne de là mais si c'est le cas, n'hésitez pas à corriger, cela va sans dire.
NorSeb Posté 14 Novembre 2005 Posté 14 Novembre 2005 Le problème vient de là si : enlève toutes les quotes et ca devrait être bon
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant