IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Problème requête avec INSTR()


Sujet :

Langage SQL

  1. #1
    Membre du Club Avatar de yohan0262
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 159
    Points : 49
    Points
    49
    Par défaut Problème requête avec INSTR()
    Bonjour,

    Je souhaite faire correspondre le nom d'un fichier avec un nom que j'ai déterminé dans ma table nomination dans le champ type_instal. Par exemple si le nom du fichier est "lavage-evaporateur.pdf" et que le nom déterminée dans ma table est évaporateur, il faut que le fichier renvois un id correspondant au mot déterminé.

    Pour réaliser ceci, il me faut forcément une requête or il y a un problème dans celle-ci.
    Voici tout d'abord la structure de ma table :

    Nomination : id_instal / type_instal

    Et ensuite voila la requête qui me pose problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    $req = "SELECT id_instal FROM nomination WHERE 0 < (SELECT INSTR('".$fichier."', type_instal) FROM nomination)";
    L'erreur renvoyé est : "subquery return more than 1 row" ! Je comprend ce que me dis l'erreur mais je ne vois pas comment agir pour résoudre le problème. Cependant la fonction INSTR fonctionne correctement et identifie bien les chaînes de caractère. Dès lors où j'ai fais le lien dans mon where clause l'erreur est apparut. J'espère que quelqu'un sera trouver une solution a mon problème.

    Merci de vos réponses =)

  2. #2
    Expert confirmé
    Avatar de pc75
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3 662
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3 662
    Points : 4 047
    Points
    4 047
    Par défaut
    Bonjour,

    Regarde la commande LIKE dans une requête SQL

  3. #3
    Membre du Club Avatar de yohan0262
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 159
    Points : 49
    Points
    49
    Par défaut
    Citation Envoyé par pc75
    Bonjour,

    Regarde la commande LIKE dans une requête SQL
    Je l'ai déjà essayer pc75 et elle ne correspond pas à ce que j'attend puisque la sous chaîne et la chaîne ne sont pas strictement égale ! La fonction INSTR me permet de regarder dans la chaîne si la sous chaîne est bien présente, tandis que si j'utilise l'opérateur LIKE j'aurais surement eut recours au Substring.

    Bref il me faut juste une correction de ma requête. =)

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 109
    Points : 28 437
    Points
    28 437
    Par défaut
    En ayant compris l'usage de l'opérateur LIKE, tu serais arrivé à la requête suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT id_instal 
    FROM nomination 
    WHERE type_instal LIKE '%".$fichier."%'
    ;

  5. #5
    Membre du Club Avatar de yohan0262
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 159
    Points : 49
    Points
    49
    Par défaut
    Citation Envoyé par al1_24
    En ayant compris l'usage de l'opérateur LIKE, tu serais arrivé à la requête suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT id_instal 
    FROM nomination 
    WHERE type_instal LIKE '%".$fichier."%'
    ;
    C'est ce que j'ai fais alain, j'avais bien pris connaissance de la définition de like et j'avais bien compris le systeme des pourcents, mais comme je l'ai dis au dessus le like ne correspond pas à mes attentes.

  6. #6
    Membre du Club Avatar de yohan0262
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 159
    Points : 49
    Points
    49
    Par défaut
    Personne ne voit où est l'erreur ?

  7. #7
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    Ben si vous comprenez le message d'erreur alors vous devriez être en mesure de pouvoir le corriger, non ?
    En effet, il existe au moins une ligne de la table nomination pour laquelle votre sous-requête ramène plus d'une ligne.
    Trouvez laquelle (lesquelles ?) et modifiez votre sous-requête !

  8. #8
    Membre du Club Avatar de yohan0262
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 159
    Points : 49
    Points
    49
    Par défaut
    Citation Envoyé par Magnus
    Ben si vous comprenez le message d'erreur alors vous devriez être en mesure de pouvoir le corriger, non ?
    En effet, il existe au moins une ligne de la table nomination pour laquelle votre sous-requête ramène plus d'une ligne.
    Trouvez laquelle (lesquelles ?) et modifiez votre sous-requête !
    Ben plus facile à dire qu'à faire tu sais ! Je ne suis pas non plus débutant en programmation mais j'exerce la plupart de mon temps le langage C. Or le projet que l'on m'a confié cette fois-ci doit-être en php, heureusement que ce dernier n'est pas si différent du C d'ailleur(pour php4)... Par contre pour le SQL j'avou être un débutant, j'ai beau comprendre l'erreur renvoyé mais je ne sais pas forcément comment agir, ce qui me parait complétement normal !

    Sinon je vais réfléchir à ton post mais un coup de main me ferait grand bien.

  9. #9
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    Ok.
    Je crois que vous n'avez pas compris pourquoi mes collègues n'ont pas utilisé de sous-requête contrairement à vous.
    Pour comprendre où se situe le problème avec votre sous-requête alors procédez en 2 temps :
    1/ relisez le tutoriel sur les sous-requêtes
    2/ exécutez cette requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT INSTR('".$fichier."', type_instal) FROM nomination
    Elle retourne plus d'une ligne donc le moteur de votre SGBD ne sait pas laquelle de ces valeurs il doit utiliser pour la comparer à 0 (Cf. votre 1ère requête).

  10. #10
    Membre du Club Avatar de yohan0262
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 159
    Points : 49
    Points
    49
    Par défaut
    C'est bon j'ai réussis ! Je vous fais part de la requête pour ceux qui auront le même problème que moi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $req = "SELECT id_instal FROM nomination WHERE INSTR('".$fichier."', type_instal) > 0";
    Merci de vos réponses et de vos aides,
    A bientot !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SQL] Problème requête avec Limit 1
    Par miss_monika dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 13/06/2007, 10h16
  2. Problème requête avec access
    Par celiaaa dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 29/05/2007, 12h40
  3. Problème requête avec 2 conditions
    Par omgirl dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 12/07/2006, 16h19
  4. Problème requête avec group by et distinct
    Par tomca dans le forum Langage SQL
    Réponses: 2
    Dernier message: 20/07/2005, 16h10
  5. Problème requête avec UNION et ORDER BY
    Par Yann21 dans le forum Langage SQL
    Réponses: 12
    Dernier message: 12/12/2003, 11h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo