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 :

Utilisation d'un like [PDO]


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 51
    Points : 30
    Points
    30
    Par défaut Utilisation d'un like
    Bonjour,
    Comment pourrais-je utiliser les % dans le like, car je recupère plusieurs ID dans une combobox, et je voudrais Selectionner les id qui contiennent un chiffre. Or les Idtype peuvent etre "1 2 3 4" , donc je voudrait par exemple selectionner cette colonne, car il y a le 2.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $req = $pdo->prepare("SELECT partie.*
                                        FROM partie, categorie,type_projet,type_categorie,site
                                        WHERE site.id=$siteid
                                        AND site.type LIKE '%'.type_categorie.idtype.'%'
                                        AND type_categorie.idcategorie=categorie.id
                                        AND categorie.idpartie=partie.id 
                                        GROUP BY partie.id ");
                $req->execute();
    merci

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Mettre plusieurs valeurs dans une colonne est une mauvaise idée.
    Pour trouver "1" par exemple il faudrait chercher "1 %" ou "% 1 %" ou "1 %"

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 51
    Points : 30
    Points
    30
    Par défaut
    J'ai résolu en trouvant ceci :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
     AND site.type LIKE '%'||type_categorie.idtype||'%'

    Est-ce une bonne idée?

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 51
    Points : 30
    Points
    30
    Par défaut
    Enfait non cela ne marche pas, car il me ressort tout les idtypes .. Donc ça ne va pas ...

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    avec une liste du genre "1,2,3,4,58,9531" :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $query = "SELECT * ".
    		" FROM TAB_TEST ".
    		" WHERE liste_ids LIKE '".$valeur_cherchee.",%' ". // au début
    		" OR liste_ids LIKE '%,".$valeur_cherchee.",%' ". // au milieu
    		" OR liste_ids LIKE '%,".$valeur_cherchee."' ". // à la fin
    		" OR liste_ids = '".$valeur_cherchee."' ". // seul
    		" ;";
    Ou encore :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $sep = ',';
    $query = "SELECT * ".
    		" FROM TAB_TEST ".
    		" WHERE liste_ids LIKE '".$valeur_cherchee.$sep"%' ". // au début
    		" OR liste_ids LIKE '%"$sep.$valeur_cherchee.$sep"%' ". // au milieu
    		" OR liste_ids LIKE '%"$sep.$valeur_cherchee."' ". // à la fin
    		" OR liste_ids = '".$valeur_cherchee."' ". // seul
    		" ;";


    N.B. Mais ça n'en est pas moins une mauvaise idée...

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 51
    Points : 30
    Points
    30
    Par défaut
    Le probleme c'est que ce n'est pas une valeurs, donc pas un $valeur, c'est une valeur qui se trouve dans une requete, donc la valeur change ..

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    je viens de retrouver la commande SQL qui permet de faire ce que tu veux : FIND_IN_SET
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $query = "SELECT * ".
    		" FROM TAB_TEST t1 ".
    		" INNER JOIN TAB_TEST2 t2 ".
    			" ON FIND_IN_SET( t2.idtype, t1.liste_ids ) != 0 ".
    		" AND t2.idtype = 3 ". // valeur
    		" ;";
    avec une liste du genre "1,2,3,4,58,9531" (séparateur : virgule)

    Adapté à ton code, ça devrait donner :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    "SELECT partie.*
    	FROM partie
    	INNER JOIN categorie
    		ON categorie.idpartie = partie.id
    	INNER JOIN type_categorie
    		ON type_categorie.idcategorie = categorie.id
    	INNER JOIN site
    		ON FIND_IN_SET( type_categorie.idtype, site.type ) != 0 
     
    	WHERE site.id = $siteid
    	GROUP BY partie.id "

    N.B. type_projet ?? (aucun liens avec les autres tables de la requete)

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 51
    Points : 30
    Points
    30
    Par défaut
    Merci ! je vais essayer, oui je viens de voir sa aussi avec type_projet.
    En revanche si c'est séparer par des espaces c'est pas grave ? ça marche pareil ?
    Merci de ton aide

  9. #9
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par fazexx Voir le message
    ...si c'est séparé par des espaces ça marche pareil ? ...
    Non.
    Les éléments de listes doivent être séparés par une virgule.


    A string list is a string composed of substrings separated by “,” characters

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 51
    Points : 30
    Points
    30
    Par défaut
    Bon mon champs idType dans ma table type_categorie est bien : "1,2", mais je n'arrive pas a afficher lorsque mon type est 2 ... Alors que si il est=1 ça marche

  11. #11
    Invité
    Invité(e)
    Par défaut
    Teste la requete directement dans phpMyAdmin.

    Avec :
    WHERE site.id = 1

    WHERE site.id = 2
    ...

    Et regarde ce qui se passe.

    N.B. "Ca ne marche pas" n'est pas une réponse utile.

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 51
    Points : 30
    Points
    30
    Par défaut
    Avec site.id = 1, ça me retourne les bons trucs, avec 2, il me retourne 0 lignes ...

  13. #13
    Invité
    Invité(e)
    Par défaut
    Je ne peux rien te dire de plus.

    Il faudrait voir des extraits significatifs de tes tables.
    + ta requête SQL.

    remarque : tu as plusieurs INNER JOIN dans la requête.
    INNER JOIN suppose que les tables ont forcément une relation.
    Certains pourraient être OUTER JOIN ? LEFT OUTER JOIN ?...

  14. #14
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 51
    Points : 30
    Points
    30
    Par défaut
    Mais je pense que c'est ma requête qui est fausse, car le find_in_set marche ailleurs.
    En tout cas merci du tuyau, j'ai plus qu'a reprendre ma requête

  15. #15
    Invité
    Invité(e)
    Par défaut
    Pense à les messages qui t'ont aidés.

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

Discussions similaires

  1. Utilisation spéciale de LIKE
    Par tonyskn dans le forum Langage SQL
    Réponses: 5
    Dernier message: 19/07/2024, 11h36
  2. VBA - utilisation de 'not like'
    Par tiber33 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 03/01/2014, 14h25
  3. Utilisation du mot LIKE dans une requete
    Par Astro8899 dans le forum VB.NET
    Réponses: 6
    Dernier message: 27/05/2009, 11h20
  4. [MySQL] Utilisation de SQL LIKE
    Par Interface dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 19/05/2009, 14h30

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