Boumbadaboum Posté 11 Août 2005 Partager Posté 11 Août 2005 (modifié) Bon encore une requête sql dsl... Mais je progresse j'en écris plein toute seule avec mes deux nouveaux bouquins là j'ai essayé ça : UPDATE `annuaire` SET id = 'definitions.id' WHERE urlMotClef = 'definitions.urlMotClef' ça me marque unknown collumn definitions j'ai essayé de mettre annuaire.id =definitions.id c'est pareil idem avec annuaire.urlMotClef = definitions.urlMotClef c'est pareil. Ou alors ça me met 0 enregistrement à jour... Le but est pourtant simple : J'ai une table annuaire avec des mots et une table definitions avec des mots pareils. Maintenant je veux que les champs id de la table annuaire corresponde avec ceux de la table definitions partout où urlMotClef est en commun. Je pensais y'arriver du premier coup avec ma requête Modifié 11 Août 2005 par Boumbadaboum Lien vers le commentaire Partager sur d’autres sites More sharing options...
Boumbadaboum Posté 11 Août 2005 Auteur Partager Posté 11 Août 2005 Bonsoir, Pourquoi quand j'utilise la requête suivante, cela fonctionne "UPDATE `definitions` set nbrLiens = nbrLiens+1 WHERE `urlMotClef` like '$urlMotClef%' " alors qu'avec celle ci (= au lieu de like) ça ne fonctionne pas.[CODE]"UPDATE `definitions` set nbrLiens = nbrLiens+1 WHERE `urlMotClef` like '$urlMotClef%'" Soit disant = fonctionne aussi avec les chaines de caractères et pas seulement avec les nombres. Alors hein, hein ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
Portekoi Posté 12 Août 2005 Partager Posté 12 Août 2005 Salut la pro du SQL Concernant ta requete : UPDATE `annuaire` SET id = 'definitions.id' WHERE urlMotClef = 'definitions.urlMotClef' Ca ne peut pas fonctionner car d'où viens 'definitions.id'' ? De la table 'Definitions' mais elle n'est mentionnée nul part dans ta requete. Il faut que tu comprennes que SQL n'est pas difficile mais très 'simple' dans le sens où si tu ne lui indiques pas où aller chercher l'info, il va pas y aller tout seul Donc, voici ta requete corrigée : UPDATE annuaireSET annuaire.id = definitions.id FROM annuaire INNER JOIN definitions ON annuaire.urlmotclef = definitions.urlmotclef Traduction : Mets à jour tous les enregistrements du champs annuaire.id par le champs definitions.id dont les deux colonnes coïncides sur la colonne urlmotclef. NB : Requete non testée sous Mysql donc dis moi si clea fonctionne. Si cela ne fonctionne pas, tu devras faire une première requete, récupérer l'id et faire l'update ensuite. Portekoi Lien vers le commentaire Partager sur d’autres sites More sharing options...
Boumbadaboum Posté 12 Août 2005 Auteur Partager Posté 12 Août 2005 (modifié) Salut Portekoi ! Je me disais bien qu'il y avait une histoire de table definitions à préciser, mais comment utiliser INNER JOIN là, je ne savais pas. Cela étant j'ai essayé ta requête et j'obtiens un somptueux : You have an error in your SQL syntax near 'FROM annuaire INNER JOIN definitions ON annuaire.urlMotClef = definitions.urlMo' at line 1 On s'en lasse pas. J'ai essayé de décorrer la requete avec quelques powerElectricMacQuote un peu partout mais ça marche pas non plus Modifié 12 Août 2005 par Boumbadaboum Lien vers le commentaire Partager sur d’autres sites More sharing options...
Portekoi Posté 12 Août 2005 Partager Posté 12 Août 2005 Mysql ne doit pas supporter cette structure.... Là je sais pas Lien vers le commentaire Partager sur d’autres sites More sharing options...
Boumbadaboum Posté 12 Août 2005 Auteur Partager Posté 12 Août 2005 (modifié) sinon au dessus je me suis trompée dans ma question : je disais "pourquoi avec urlMotClef like urlMotClef j'obtiens un résultat alors qu'avec urlMotClef = urlMotClef" ça ne marche pas. "=" marche bien avec les id (chiffres donc) mais ça marche pas pour les champs varchars. Chez moi du moins. Modifié 12 Août 2005 par Boumbadaboum Lien vers le commentaire Partager sur d’autres sites More sharing options...
Portekoi Posté 12 Août 2005 Partager Posté 12 Août 2005 Peut êtres des 'blancs' ou autres caractères du même type? Lien vers le commentaire Partager sur d’autres sites More sharing options...
Boumbadaboum Posté 12 Août 2005 Auteur Partager Posté 12 Août 2005 non le contenu de mes champs varchars est du type mot-mot-mot ou mot tout court. mais ça ne me sort rien du tout avec "=" par contre avec "like" ça marche mais avec des doublons. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Dan Posté 12 Août 2005 Partager Posté 12 Août 2005 Boumbadaboum, J'imagine que ta base de données ne doit pas être bien grosse vu que tu es en période de conception. Peux-tu en faire un export ? Tu n'as pas répondu à une de mes précédentes questions je pense: quelle version de mysql utilises-tu ? Dan Lien vers le commentaire Partager sur d’autres sites More sharing options...
Boumbadaboum Posté 12 Août 2005 Auteur Partager Posté 12 Août 2005 (modifié) Bonjour Dan, Bon je ne sais pas si c'est la version sql ou la version du serveur, d'ailleur je ne distingue ni l'un ni l'autre , mais sur phpMyAdmin il y a écrit : MySQL 3.23.58-log sur le serveur sql6 je suis chez ovh C'est ça? parce que dans phpInfo j'ai pas trouvé c'est trop confus pour moi. Sinon pour l'export de la base j'ai qd même deux cent liens dedans c'est pour savoir quoi exactement? Modifié 12 Août 2005 par Boumbadaboum Lien vers le commentaire Partager sur d’autres sites More sharing options...
Portekoi Posté 12 Août 2005 Partager Posté 12 Août 2005 C'est pour avoir ta structure et ton contenu afin de faire nous même nos tests. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Boumbadaboum Posté 12 Août 2005 Auteur Partager Posté 12 Août 2005 (modifié) tu peux essayer ça : id smallint(6) auto_increment libelle varchar(255) urlMotClef varchar(250) site varchar(255) description varchar(250) url varchar(255) categorie varchar(250) et le problème vient, par exemple, avec "accord" et "accorder" en urlMotClef (qui sont les champs à comparer avec la table definitions") Sinon c'est ça la version sql ? (Une question au passage : je met 255 pour la taille du champs site, par exemple, est-ce utile ou plutot pénalisant, sachant que jamais un nom de site ne fere 250 caractères ?) Modifié 12 Août 2005 par Boumbadaboum Lien vers le commentaire Partager sur d’autres sites More sharing options...
Portekoi Posté 12 Août 2005 Partager Posté 12 Août 2005 Ca va pas nous aider des masses... Si tes données sont confidentielles, je comprends que tu ne veuilles pas mais dans le cas inverse, cela t'aidera beaucoup je pense. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Boumbadaboum Posté 12 Août 2005 Auteur Partager Posté 12 Août 2005 C'est pas que ce soit top secret mais je vois pas non plus l'intérêt d'expédier toute une table au complet ?? Si tu prends deux tuples avec les champs urlMotClef du dessus, tu mets ce que tu veux dans les autres champs, c'est pareil qu'avec 2000 non? Lien vers le commentaire Partager sur d’autres sites More sharing options...
Portekoi Posté 12 Août 2005 Partager Posté 12 Août 2005 Euh... admettons, dans ton champ tu n'as pas vu que tu avais un 'blanc' ou un truc qui pour toi est normal mais qui, pour moi, pourrait etre une erreur : Comment t'aider si je n'ai pas tes données? Lien vers le commentaire Partager sur d’autres sites More sharing options...
Boumbadaboum Posté 12 Août 2005 Auteur Partager Posté 12 Août 2005 non non je te confirme que je n'ai pas d'espace ! d'ailleurs sinon ça le ferait avec d'autres tuples pas spécifiquement avec ceux qui se ressemblent comme "accord" et "accorder" ou "explication" et "explications" "Like" me renvoit les deux. "=" me renvoit rien du tout. ça marche avec les id pourtant. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Boumbadaboum Posté 12 Août 2005 Auteur Partager Posté 12 Août 2005 (modifié) En fait c'est pas gravissime d'ailleurs, mais bon ça serait pour comprendre quoi. Et puis ça serait mieux aussi c'est vrai. (pourquoi y'a un PorteKoi souligné normalement et un Portekoi souligné "dotted" ? Un fantôme ? ) Modifié 12 Août 2005 par Boumbadaboum Lien vers le commentaire Partager sur d’autres sites More sharing options...
Portekoi Posté 12 Août 2005 Partager Posté 12 Août 2005 Sans trop de surprises, cela fonctionne chez moi. Tanpis, peut pas faire plus là. Portekoi PS : Souligné = lecture / Dotted = écriture Lien vers le commentaire Partager sur d’autres sites More sharing options...
Boumbadaboum Posté 12 Août 2005 Auteur Partager Posté 12 Août 2005 Sans trop de surprises, cela fonctionne chez moi. pff mais c'est quoi cette histoire ?? C'est pourtant pas des dinosaures chez ovh. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Boo2M0rs0 Posté 12 Août 2005 Partager Posté 12 Août 2005 (modifié) Bonsoir, Pourquoi quand j'utilise la requête suivante, cela fonctionne "UPDATE `definitions` set nbrLiens = nbrLiens+1 WHERE `urlMotClef` like '$urlMotClef%' " alors qu'avec celle ci (= au lieu de like) ça ne fonctionne pas.[CODE]"UPDATE `definitions` set nbrLiens = nbrLiens+1 WHERE `urlMotClef` like '$urlMotClef%'" Soit disant = fonctionne aussi avec les chaines de caractères et pas seulement avec les nombres. Alors hein, hein ? <{POST_SNAPBACK}> Salut, Le = est sensible à la casse alors que like ne l'est pas. De plus, seul like interprête le caractère % comme un joker ( = se contente de chercher le caractère % sans rien comprendre). Salut la pro du SQL Concernant ta requete : UPDATE `annuaire` SET id = 'definitions.id' WHERE urlMotClef = 'definitions.urlMotClef' Ca ne peut pas fonctionner car d'où viens 'definitions.id'' ? De la table 'Definitions' mais elle n'est mentionnée nul part dans ta requete. Il faut que tu comprennes que SQL n'est pas difficile mais très 'simple' dans le sens où si tu ne lui indiques pas où aller chercher l'info, il va pas y aller tout seul Donc, voici ta requete corrigée : UPDATE annuaireSET annuaire.id = definitions.idFROM annuaire INNER JOIN definitions ON annuaire.urlmotclef = definitions.urlmotclef Traduction : Mets à jour tous les enregistrements du champs annuaire.id par le champs definitions.id dont les deux colonnes coïncides sur la colonne urlmotclef. J'aurais plutot tenté: UPDATE annuaire , definitions SET annuaire.id = definitions.id WHERE annuaire.urlMotClef = definitions.urlMotClef Là encore peut pas dire à l'avance si ça va marcher mais il y a un exemple dans la doc qui y ressemble... Modifié 12 Août 2005 par Boo2M0rs0 Lien vers le commentaire Partager sur d’autres sites More sharing options...
Boumbadaboum Posté 12 Août 2005 Auteur Partager Posté 12 Août 2005 J'aurais plutot tenté:CODEUPDATE annuaire , definitions SET annuaire.id = definitions.id WHERE annuaire.urlMotClef = definitions.urlMotClef Là encore peut pas dire à l'avance si ça va marcher mais il y a un exemple dans la doc qui y ressemble... Non ça j'avais essayé mais je vais le refaire pour te faire plaisir et te dire de façon certaine si ça fonctionne. Le = est sensible à la casse alors que like ne l'est pas. De plus, seul like interprête le caractère % comme un joker ( = se contente de chercher le caractère % sans rien comprendre). à ce sujet, j'ai pas trouvé grand chose sur mon bouquin sql pour les nuls... si vous en savez plus hesitez pas ! Lien vers le commentaire Partager sur d’autres sites More sharing options...
Portekoi Posté 12 Août 2005 Partager Posté 12 Août 2005 Merci Boo2M0rs0 Je commencais à ramer Par contre, le '=' n'est pas sensible à la casse... ou peut etre que je n'y ai pas fait attention mais cela serait étonnant Pour ta requete, je pensais pas que c'était possible, merci pour l'info Lien vers le commentaire Partager sur d’autres sites More sharing options...
Boumbadaboum Posté 12 Août 2005 Auteur Partager Posté 12 Août 2005 bon je viens d'essayer ta requête Boo2M0rs0 j'obtiens #1064 - You have an error in your SQL syntax near ' definitions SET annuaire.idDef = definitions.id WHERE annuaire.urlMotClef = def' at line 1 comme quand j'avais essayé un problème de quote? Lien vers le commentaire Partager sur d’autres sites More sharing options...
Boo2M0rs0 Posté 12 Août 2005 Partager Posté 12 Août 2005 (modifié) ha en effet, jviens de vérifier, encore une gourde une erreur de ma part :x (je parles pour l'opérateur =). Pour le update par contre j'en suis sûr : http://www.nexen.net/docs/mysql/annotee/up...php?lien=update Depuis MySQL version 4.0.4, vous pouvez aussi faire des opérations de UPDATE qui couvrent plusieurs tables : UPDATE items,month SET items.price=month.price WHERE items.id=month.id; L'exemple ci-dessus montre une jointure interne, en utilisant la virgule comme séparateur, mais une commande UPDATE multi-table peut utiliser n'importe quel type de jointure autorisée dans une commande SELECT , tel qu'un LEFT JOIN .Note : vous ne pouvez pas utiliser ORDER BY ou LIMIT avec les UPDATE multi-table. Mais il faut vérifier la version de mysql c'est peut-être ça le problème :/ Modifié 12 Août 2005 par Boo2M0rs0 Lien vers le commentaire Partager sur d’autres sites More sharing options...
Boumbadaboum Posté 12 Août 2005 Auteur Partager Posté 12 Août 2005 bien comme j'ai dit au dessus j'ai trouvé ça sur phpmyadmi MySQL 3.23.58-log sur le serveur sql6 mais personne ne m'a dit si ça peut être la version de sql, sinon je sais pas où la trouver, phpinfo j'ai pas trouvé où ça se trouve. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant