Précédent   Forum des professionnels en informatique > Bases de données > MySQL
MySQL Forum d'entraide MySQL. Avant de poster -> FAQ MySQL, Tutoriels MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 25/03/2011, 07h03   #1
Membre éprouvé
 
Avatar de Christophe Charron
 
Homme Christophe Charron
Développeur informatique
Inscription : juillet 2005
Messages : 768
Détails du profil
Informations personnelles :
Nom : Homme Christophe Charron
Âge : 51
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juillet 2005
Messages : 768
Points : 492
Points : 492
Par défaut Condition pas assez restrictive?

Bonjour,

je cherche à conditionner une requête pour ne chercher et trouver que les enregistrements contenant "si("
Ci-après, un aperçu du contenu de la colonne formule de la table formules:
Code :
1
2
3
4
5
formule
si(toto=titi;1,2);
NB.SI(C5:C9;"<>0")-1;
arrondi(si(totos=titi;tata*1.5,tata*2));
rassis=totos-titi;
L'objectif étant de trouver les cas d'emploi de "si" et uniquement si

Code :
SELECT * FROM formules WHERE formule LIKE '%si(%'
me renvoie 3 lignes (1,2,3) alors que je ne voudrais récupérer que les lignes 1 et 3

Dans la même veine, je ne souhaite récupérer que les enregistrements avec le mot "toto" entier pas les totos

La condition dans
Code :
SELECT * FROM formules WHERE formule LIKE '%toto%'
me renvoie trop d'enregistrements.

D'avance, merci pour vos suggestions
__________________
Cordialement,
Christophe Charron
Pour consulter mon site professionnel, vous pouvez cliquer sur le bouton prévu à cet effet, juste sous la signature .
Christophe Charron est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/03/2011, 13h49   #2
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 998
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 998
Points : 18 262
Points : 18 262
Envoyer un message via MSN à CinePhil
Je suppose que ce que tu appelles les lignes 1 et 3 sont celles-ci ?
Citation:
si(toto=titi;1,2);
arrondi(si(totos=titi;tata*1.5,tata*2));
Pourquoi ne veux-tu pas la deuxième qui contient bien "si(" ?
Citation:
NB.SI(C5:C9;"<>0")-1;
À cause des majuscules ?

À cause du fait que c'est la fonction "nb.si" et pas "si" ?
Si toutes les fonctions comprenant "si" sont de la forme "xx.si", alors tu peux mettre une condition supplémentaire pour exclure les ".si" :
Code :
1
2
WHERE formule LIKE '%si(%'
  AND formule NOT LIKE '%.si%'
Mais si tu as une formule qui comprend à la fois "si(" à conserver et ".si" à exclure, la ligne sera exclue du résultat.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/03/2011, 13h53   #3
Membre du Club
 
Inscription : août 2009
Messages : 66
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 66
Points : 69
Points : 69
Pour ton 2e problème, on entre quasiment dans le domaine de l'expression régulière.

Je n'avais jamais eu ce problème à traiter, mais j'ai trouvé quelque chose qui concerne sur le sujet sur la doc MySQL. http://dev.mysql.com/doc/refman/5.0/fr/regexp.html

A voir si cela peut t'aider...

Si tu a beaucoup d'enregistrements à gérer, cela peut valoir le coup de modifier ta base de données pour y ajouter des tables qui vont considérablement accélérer l'écriture de tes requêtes + l'exécution de ces requêtes. Exemple : une table de mots modifiée après chaque ajout, modification, suppression dans la table formules. Liste des champs : id, mots, idformule, n° ligne.
NicoD. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/03/2011, 10h58   #4
Membre éprouvé
 
Avatar de Christophe Charron
 
Homme Christophe Charron
Développeur informatique
Inscription : juillet 2005
Messages : 768
Détails du profil
Informations personnelles :
Nom : Homme Christophe Charron
Âge : 51
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juillet 2005
Messages : 768
Points : 492
Points : 492
Citation:
Envoyé par CinePhil Voir le message
Je suppose que ce que tu appelles les lignes 1 et 3 sont celles-ci ?
Pourquoi ne veux-tu pas la deuxième qui contient bien "si(" ?
À cause des majuscules ?

À cause du fait que c'est la fonction "nb.si" et pas "si" ?
Si toutes les fonctions comprenant "si" sont de la forme "xx.si", alors tu peux mettre une condition supplémentaire pour exclure les ".si" :
Code :
1
2
WHERE formule LIKE '%si(%'
  AND formule NOT LIKE '%.si%'
Mais si tu as une formule qui comprend à la fois "si(" à conserver et ".si" à exclure, la ligne sera exclue du résultat.

Bonjour,

oui, je veux traiter distinctement les 2 formules. Je cherche à énumérer les cas d'emplois.
Donc pour moi si et nb.si ne sont pas identiques.
Et l'exclusion que tu évoques à la limite que tu lui donnes et implique également la connaissance exhaustive des autres combinaisons possibles : et plein d'autres formules créées par l'utilisateur se terminant par "si"

Je vais plutôt chercher du côté des expressions régulières et je reviendrai poser le résultat ici.
__________________
Cordialement,
Christophe Charron
Pour consulter mon site professionnel, vous pouvez cliquer sur le bouton prévu à cet effet, juste sous la signature .
Christophe Charron est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/03/2011, 11h02   #5
Membre éprouvé
 
Avatar de Christophe Charron
 
Homme Christophe Charron
Développeur informatique
Inscription : juillet 2005
Messages : 768
Détails du profil
Informations personnelles :
Nom : Homme Christophe Charron
Âge : 51
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juillet 2005
Messages : 768
Points : 492
Points : 492
Citation:
Envoyé par NicoD. Voir le message
Pour ton 2e problème, on entre quasiment dans le domaine de l'expression régulière.

Je n'avais jamais eu ce problème à traiter, mais j'ai trouvé quelque chose qui concerne sur le sujet sur la doc MySQL. http://dev.mysql.com/doc/refman/5.0/fr/regexp.html

A voir si cela peut t'aider...

Si tu a beaucoup d'enregistrements à gérer, cela peut valoir le coup de modifier ta base de données pour y ajouter des tables qui vont considérablement accélérer l'écriture de tes requêtes + l'exécution de ces requêtes. Exemple : une table de mots modifiée après chaque ajout, modification, suppression dans la table formules. Liste des champs : id, mots, idformule, n° ligne.
Bonjour,

oui, je vais explorer les expressions régulières.
Non, je n'ai pas beaucoup de formules : un petit 10 000
Je vais donc voir comment se comportent les expressions régulières sur ce volume et ensuite j'aviserai.
Je reviendrai poser le résultat de mes recherches.

Merci à tous vous vos éclairages.
__________________
Cordialement,
Christophe Charron
Pour consulter mon site professionnel, vous pouvez cliquer sur le bouton prévu à cet effet, juste sous la signature .
Christophe Charron est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h06.


 
 
 
 
Partenaires

Hébergement Web