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

PHP & Base de données Discussion :

Trouver si une lettre existe dans le champ d'une table dans un SELECT [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Inscrit en
    Octobre 2008
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 329
    Points : 97
    Points
    97
    Par défaut Trouver si une lettre existe dans le champ d'une table dans un SELECT
    Bonjour,

    Dans une table de ma base de données j'ai un champ 'id_region' codé de la façon suivante :

    a = Alsace
    b = Aquitaine
    c = Auvergne
    // Ici la suite des régions...
    u = Provence-Alpes-Côte d'Azur
    v = Rhône-Alpes

    Par exemple si un membre se déplace en Aquitaine et en Rhône-Alpes, le champ 'id_region' sera égal à 'bv', et si un autre se déplace en Alsace, Aquitaine et Provence-Alpes-Côte d'Azur, il sera codé 'abu'.
    J'ai codé de cette façon afin d'économiser 21 champs par enregistrement dans ma base de données : au lieu d'avoir 22 champs (1 par région), je n'en ai qu'un seul dans lequel sont stockées toutes les régions ou le membre se déplace.

    Sur mon site je suis en train de développer la fonction de recherche ou l'utilisateur peut rechercher les membres qui se déplacent dans sa région. Il peut donc sélectionner à l'aide d'un menu déroulant les membres qui se déplacent par exemple dans le Limousin (lettre 'n'). Il ne peut sélectionner qu'une seule région par recherche et la variable s'appelle $id_region.

    Je dois maintenant afficher le résultat, mais je ne sais pas comment faire le SELECT...

    Il faudrait donc vérifier que la lettre 'n' est présente ou non dans le champ 'id_region' de chaque membre, qui par exemple peut être égal à 'abdgntuv'.

    Il faudrait faire un SELECT du genre... :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = "SELECT membre FROM table WHERE id_region = strpos(region, $id_region)";
    Mais je ne crois pas qu'on puisse mettre du PHP dans une commande SQL...

    Bref vous l'avez compris je ne sais comment m'y prendre...!

    Quelqu'un a t'il une idée ?

    Merci de votre aide

  2. #2
    Inactif   Avatar de Deallyra
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    1 997
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 1 997
    Points : 1 769
    Points
    1 769
    Par défaut
    Hum...

    Petite proposition...

    Un intervenant peut aller dans 0,n Région.
    Une région peut être visitée par 0,n Intervenant.

    Ceci impliquerait la création d'une troisième table.

    Intervenant ( id, nom, prenom, adresse....)
    Region ( id, libelle .... )
    Date ( date )
    SeDeplacer (idIntervenant, idLibelle, date)

    Ce serait plus facile à gérer non?
    *Si la réponse vous convient, n'oubliez pas le tag
    *Exprimez vous dans un français correct; on prend le temps de vous lire, prenez le temps de bien écrire.
    *Et comment on interprète votre code? N'oubliez pas la balise!

    *Pour une mise en page simple avec des divs.
    *Pour faire des formulaires xHTML CSS.

  3. #3
    Membre régulier
    Inscrit en
    Octobre 2008
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 329
    Points : 97
    Points
    97
    Par défaut Hum...
    Bien possible...! Je suis autodidacte et débutant je dois le rappeler...!

    Mais je voulais éviter à avoir à remplir 22 champs alors qu'un seul est bien mieux ! Au départ j'ai essayé les 22 (id_region_1, id_region_2, etc..), mais les temps d'écriture en local devenaient excessivement long, car le formulaire d'inscription comporte déjà une trentaine de champs, alors + les 22 régions ça devenait énorme...!

    Par la suite, pour l'affichage des fiches des membres, j'ai du créer des petites fonctions pour décoder les 'adfi' et autres 'acefh' en noms de région, mais je m'en suis sorti...!

    Mon site est maintenant quasiment terminé, et je tombe sur cette os à la fontion de recherche...! La recherche qui est multi-critères j'avais oublié de le préciser !

    La solution serait peut-être de passer par un traitement intermédiaire, ou je placerais dans un tableau tous les membres qui correspondent à tous les premiers critères de recherche , et ou je ferais enfin un tri de ceux qui interviennent dans la région 'n' avec un 'strpos' sur le champ 'id_region'.

    Qu'en pensez-vous ?

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 264
    Points : 141
    Points
    141
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $sql = "SELECT membre FROM table WHERE LIKE 'region')";

  5. #5
    Membre régulier
    Inscrit en
    Octobre 2008
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 329
    Points : 97
    Points
    97
    Par défaut Ah....?
    Si cette ligne suffisait, ce serait le paradis...! Je vais essayer !

  6. #6
    Inactif   Avatar de Deallyra
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    1 997
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 1 997
    Points : 1 769
    Points
    1 769
    Par défaut
    Heu...

    Désolée mais si tu as mal fait ta BdD au début, normal que tu aies des problèmes...

    Maintenant tu peux bidouiller ou faire un truc qui tient debout...

    Avec "ma" méthode, tu auras un peu de temps à passer en créant la BdD mais ensuite ce sera très simple... Je ne vois pas de problème.

    Dans ta méthode, c'est une chose qui aurait pu être faite mais "abu" ne veux rien dire.
    Ensuite, tu dois découper cette chaine en php pour récupérer chaque caractère et ensuite faire une recherche dans ta table région pour connaître l'équivalence...

    Tu parles coût en terme de temps mais je ne pense pas que ce que tu fais est plus rapide.


    Si tu as fait ton site en mettant toutes tes fonctions et requêtes dans un seul fichier, ce ne doit pas être trop dur de faire les modifications adéquates

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = "SELECT membre FROM table WHERE LIKE 'region')";
    Ne peut pas marcher.

    Where quoi LIKE 'region'

    Il manque un terme.
    *Si la réponse vous convient, n'oubliez pas le tag
    *Exprimez vous dans un français correct; on prend le temps de vous lire, prenez le temps de bien écrire.
    *Et comment on interprète votre code? N'oubliez pas la balise!

    *Pour une mise en page simple avec des divs.
    *Pour faire des formulaires xHTML CSS.

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 264
    Points : 141
    Points
    141
    Par défaut
    Il existe http://www.maxmind.com/ pour faire de la géolocalisation.

  8. #8
    Membre régulier
    Inscrit en
    Octobre 2008
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 329
    Points : 97
    Points
    97
    Par défaut Avec LIKE...
    J'essaie la solution avec LIKE qui semble prometteuse mais j'ai une erreur "Warning: Division by zero" sur cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $argument .= sprintf(' AND id_region LIKE '%$id_region%'');
    Je cherche une id_region qui contient la variable $id_region dans son nom, avec éventuellement d'autres caractères avant ou après. id_region est de type VARCHAR, $id_region est une lettre

    J'ai essayé également :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $argument .= sprintf(' AND id_region LIKE "%$id_region%"');
    Et dans ce cas j'ai une erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Warning: sprintf() [function.sprintf]: Too few arguments
    Je ne comprends pas d'ou viennent ces erreurs...

    Quelqu'un a une idée ?

    Merci pour votre aide

  9. #9
    Inactif   Avatar de Deallyra
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    1 997
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 1 997
    Points : 1 769
    Points
    1 769
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sprintf("AND id_region LIKE %d", $number);
    Comme ceci plutôt non?

    Et ton % correspond à quoi?

    Un caractère au hasard ou alors un formatage de données?

    edit : pourquoi utiliser sprintf() ?
    *Si la réponse vous convient, n'oubliez pas le tag
    *Exprimez vous dans un français correct; on prend le temps de vous lire, prenez le temps de bien écrire.
    *Et comment on interprète votre code? N'oubliez pas la balise!

    *Pour une mise en page simple avec des divs.
    *Pour faire des formulaires xHTML CSS.

  10. #10
    Membre régulier
    Inscrit en
    Octobre 2008
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 329
    Points : 97
    Points
    97
    Par défaut % et autres
    - Les % pour éventuellement d'autres caractères avant ou après.
    Par exemple si $id_region = 'b', je veux sélectionner les id_region qui ont la valeur 'abd', ou 'bdf', ou 'ab', ou 'b'.

    - Pourquoi remplacer $id_region par 'd' ? $id_region est une variable transmise par mon formulaire de recherche

    - J'ai viré le sprintf

    - A quoi correpond $number ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $argument .= ' AND id_region LIKE '%$id_region%'';
    J'ai toujours l'erreur "Warning: Division by zero"

  11. #11
    Inactif   Avatar de Deallyra
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    1 997
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 1 997
    Points : 1 769
    Points
    1 769
    Par défaut
    $number pour ton idRégion, désolée.

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    $argument .= ' AND id_region LIKE %'.$id_region.'%;'

    Le % appartient au SQL et non au PHP.
    *Si la réponse vous convient, n'oubliez pas le tag
    *Exprimez vous dans un français correct; on prend le temps de vous lire, prenez le temps de bien écrire.
    *Et comment on interprète votre code? N'oubliez pas la balise!

    *Pour une mise en page simple avec des divs.
    *Pour faire des formulaires xHTML CSS.

  12. #12
    Membre régulier
    Inscrit en
    Octobre 2008
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 329
    Points : 97
    Points
    97
    Par défaut Ouch !
    Problème de syntaxe sur ta ligne...

    Un ' après le point virgule en bout de ligne ?

    J'ai corrigé en :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $argument .= ' AND id_region LIKE %'.$id_region.'%';

    Si je choisis la région Alsace dans mon formulaire et que je fais un echo de $argument j'obtiens :

    AND sexe = "1" AND id_pays = 2 AND id_region LIKE %a% ORDER BY RAND(756) LIMIT 0, 14

    J'ai l'impression qu'on se rapproche, mais j'ai maintenant cette erreur :

    Erreur MySQL : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '%a% ORDER BY RAND(756) LIMIT 0, 14' at line 1

  13. #13
    Inactif   Avatar de Deallyra
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    1 997
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 1 997
    Points : 1 769
    Points
    1 769
    Par défaut
    ORDER BY RAND (756)

    ...

    Tu cherches à faire quoi au juste? -_-
    *Si la réponse vous convient, n'oubliez pas le tag
    *Exprimez vous dans un français correct; on prend le temps de vous lire, prenez le temps de bien écrire.
    *Et comment on interprète votre code? N'oubliez pas la balise!

    *Pour une mise en page simple avec des divs.
    *Pour faire des formulaires xHTML CSS.

  14. #14
    Membre régulier
    Inscrit en
    Octobre 2008
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 329
    Points : 97
    Points
    97

  15. #15
    Membre régulier
    Inscrit en
    Octobre 2008
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 329
    Points : 97
    Points
    97
    Par défaut La solution
    Voici la ligne modifiée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $argument .= ' AND id_region LIKE \'%'.$id_region.'%\'';
    Tout fonctionne maintenant parfaitement.

    Merci pour votre aide !

  16. #16
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 264
    Points : 141
    Points
    141
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $argument .= " AND id_region LIKE '%$id_region%'";
    

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

Discussions similaires

  1. Un test si une valeur existe dans un champ d'une table
    Par pasb71 dans le forum VBA Access
    Réponses: 3
    Dernier message: 21/11/2013, 16h24
  2. Réponses: 3
    Dernier message: 16/04/2009, 17h10
  3. ADO et les guillemet dans les champs d'une base Texte
    Par jnc dans le forum Bases de données
    Réponses: 3
    Dernier message: 27/10/2005, 08h41
  4. Lire un code à barre dans un champ d'une table
    Par tleboukaka dans le forum Débuter
    Réponses: 1
    Dernier message: 05/09/2005, 15h15

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