Page 1 sur 1
[Résolu] Requête SQL
Publié : ven. 21 oct. 2016 12:23
par kalistyan
J'ai un besoin urgent !
J'ai une table qui contient 31452 lignes.
Je souhaite effacer les lignes de la colonne "messagefilename" qui commence par :
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

[Résolu] Requête SQL
Publié : ven. 21 oct. 2016 12:47
par dsebire
T'as un backup de la bdd avant ??
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
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
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
é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

[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

[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
