Aller au contenu

Sujets conseillés

Posté (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 :blush:

Modifié par Boumbadaboum
Posté

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é

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 annuaire

SET  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

Posté (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é par Boumbadaboum
Posté (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é par Boumbadaboum
Posté

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.

Posté

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

Posté (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 :blush:, 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é par Boumbadaboum
Posté (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é par Boumbadaboum
Posté

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. :)

Posté

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?

Posté

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?

Posté

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.

Posté (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é par Boumbadaboum
Posté

Sans trop de surprises, cela fonctionne chez moi.

Tanpis, peut pas faire plus là.

Portekoi

PS : Souligné = lecture / Dotted = écriture :)

Posté (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 annuaire
SET  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.

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é par Boo2M0rs0
Posté

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 !

Posté

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 :)

Posté

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?

Posté (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é par Boo2M0rs0
Posté

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.

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...