Page 1 sur 1

[Résolu] Requête SQL

Publié : ven. 21 oct. 2016 12:23
par kalistyan
:hello:

J'ai un besoin urgent ! :pt1cable:

J'ai une table qui contient 31452 lignes.
Je souhaite effacer les lignes de la colonne "messagefilename" qui commence par :

Code : Tout sélectionner

C:\Program Files\hMailServer
Il s'agit d'une base MySQL, actuellement connecté à l'aide du client HeidiSQL.

Une suppression manuelle me donne ceci :

Code : Tout sélectionner

DELETE FROM `hmailserver`.`hm_messages` WHERE  `messageid`=574890;
J'en déduis cela, mais je coince sur la fin...

Code : Tout sélectionner

DELETE FROM `hmailserver`.`hm_messages` WHERE  `messagefilename`=;
Une idée ?

Merci :jap:

[Résolu] Requête SQL

Publié : ven. 21 oct. 2016 12:47
par dsebire
T'as un backup de la bdd avant ?? :D

Where 'messagefilename' like %c:\program files\hmailserver%

Par contre, de mémoire ça va prendre tout ce qui contiens la chaîne

Ps: Attention au copier/coller, j'ai fait ça de mon tel, donc la casse et les antiquité sont pas la

[Résolu] Requête SQL

Publié : ven. 21 oct. 2016 12:54
par Zedoune

Code : Tout sélectionner

SELECT * from hmailserver WHERE messagefilename like 'C:\Program Files\hMailServer%';
faut peut être doubler les \ dans la requête
si ça te renvoie ce que tu veux, tu remplaces select * par DELETE

[Résolu] Requête SQL

Publié : ven. 21 oct. 2016 13:04
par kalistyan
:sweat:

Code : Tout sélectionner

SELECT * FROM `hmailserver`.`hm_messages` WHERE  `messagefilename` like 'C:\Program Files\hMailServer%';
/* Lignes affectées :: 0  Lignes trouvées: 0  Avertissements: 0  Durée pour 1 requête: 0,078 sec. */

[Résolu] Requête SQL

Publié : ven. 21 oct. 2016 13:08
par Zedoune
essaie déjà avec un like 'C:\\Program%'

ou like 'C:\\\\Program%'

[Résolu] Requête SQL

Publié : ven. 21 oct. 2016 13:11
par kalistyan
:sol:

Code : Tout sélectionner

SELECT * FROM `hmailserver`.`hm_messages` WHERE  `messagefilename` like 'C:\\\\Program Files\\\\hMailServer%';
/* Lignes affectées :: 0  Lignes trouvées: 6 323  Avertissements: 0  Durée pour 1 requête: 0,000 sec. (+ 0,141 sec. network) */

[Résolu] Requête SQL

Publié : ven. 21 oct. 2016 13:14
par Zedoune
du coup si les lignes te semblent correspondre à ce que tu veux, tu peux mettre

DELETE from hmailserver where .......

oublie pas de sauvegarder la base avant, TOUJOURS :D

étonnant le \\\\ mais j'avais fait des tests en console mysql et ça marchait mais je pensais que ça venait du fait que j'avais des \\ en entrée...

Code : Tout sélectionner

select 'C:\\Program Files\\hMailServer\\blablabla' like 'C:\\\\Program%';

[Résolu] Requête SQL

Publié : ven. 21 oct. 2016 13:16
par kalistyan
Cela correspond !

Le delete s'est bien passé. :d

La BDD était bien entendu sauvegardée. ;)

Pourquoi faut-il quadrupler les \ ?

[Résolu] Requête SQL

Publié : ven. 21 oct. 2016 13:17
par Zedoune
apparemment dans la base les \ sont stockés \\ du coup pour matcher \\ faut deux caractères \ soit deux fois \\ pour un seul, soit \\\\ pour les 2
c'est ma théorie mais je comprends pas pourquoi c'set stocké \\ dans la base :heink:

[Résolu] Requête SQL

Publié : ven. 21 oct. 2016 13:21
par Zedoune
selon un collègue, c'est qu'on échappe une fois pour la syntaxe SQL et une fois supplémentaire parce qu'on est dans le LIKE :pt1cable:

[Résolu] Requête SQL

Publié : ven. 21 oct. 2016 14:28
par kalistyan
D'accord, grand merci pour le coup de main & les détails ;) :jap: