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

jQuery Discussion :

requête SQL : dropdown 40 000 éléments


Sujet :

jQuery

  1. #1
    Membre du Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Janvier 2018
    Messages
    299
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2018
    Messages : 299
    Points : 67
    Points
    67
    Par défaut requête SQL : dropdown 40 000 éléments
    Bonjour,
    Mon problème est simple: j'ai ceci :
    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    							<select type="text" class="form-control client_ville select2_size1" id="ville_client">
    								<?php $list = $bdd->query('SELECT * FROM ville ORDER BY ville_nom ASC');
                                                                    while ($data = $list->fetch()) { ?>
    										<option value="<?php echo $data['ville_nom']; ?>"> <?php echo $data['ville_nom']; ?></option>
    								<?php } $list->closeCursor(); ?>
    							</select>
    qui me charge 40 000 entrées. Donc ça rame. Et jveux limiter cela.
    J'utilise select2, j'ai un input qui me charge le nom des villes quand je commence à tapper par exemple "Rou" j'ai "Rouen" et les autres commençant aussi par Rou.
    Merci d'avance.

    PS : pas de technique de css bidon, j'ai besoin d'une solution soit SQL (style limit 0,20, le problème c'est que je n'aurai que les 20 premiers) soit à la place de mon select un genre d'input qui ne fait une requête SQL que lorsque j'ai commencé à rentrer un nom de ville.

    Merci

  2. #2
    Expert confirmé Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 529
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 529
    Points : 4 740
    Points
    4 740
    Par défaut
    Il y a aussi la possibilité d'utiliser un datalist => https://developer.mozilla.org/fr/doc...ement/datalist

    mais j'y crois pas trop :finir par avoir 40 000 éléments dans un select, c'est forcément une erreur dans la conception de l'interface
    «La pluralité des voix n'est pas une preuve, pour les vérités malaisées à découvrir, tant il est bien plus vraisemblable qu'un homme seul les ait rencontrées que tout un peuple.» [ René Descartes ] - Discours de la méthode

  3. #3
    Membre du Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Janvier 2018
    Messages
    299
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2018
    Messages : 299
    Points : 67
    Points
    67
    Par défaut
    Merci pour ta réponse.
    Une erreur de conception? Je n'ai rien fais d'incroyable. J'ai une table, 40 000 villes, je les charge, et ça fait beaucoup. Si tu une meilleure idée sur la conception de ma table je suis preneur!

    Ta datalist marche à la perfection, merci infiniment c'est exactement ce dont j'avais besoin!

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

    l'"erreur de conception" est d'afficher, par défaut, les 40000 villes !

    Citation Envoyé par Zarkoffe Voir le message
    ...soit à la place de mon select un genre d'input qui ne fait une requête SQL que lorsque j'ai commencé à rentrer un nom de ville...
    Puisque tu as déjà un "auto-complète" (ce select2 ?), il suffirait d'ajouter une restriction.

    1- PHP (affichage par défaut) :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    if( $list->rowCount() > 100 )
    {
       echo '<option>Trop de réponses. Affinez votre recherche...</option>';
    } else {
       while( ... ]
       {
         //  ... (affiche les <option>)
       }
    }
    2- JS : A voir si "select2" ne propose pas aussi cette restriction.

    Perso, je n'utilise pas "select2.
    Juste un script JS/Ajax, qui appelle un fichier PHP (qui renvoie un code comme ci-dessus).
    Dernière modification par Invité ; 07/08/2019 à 14h06.

  5. #5
    Expert confirmé Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 529
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 529
    Points : 4 740
    Points
    4 740
    Par défaut
    Citation Envoyé par psychadelic Voir le message
    finir par avoir 40 000 éléments dans un select, c'est forcément une erreur dans la conception de l'interface
    «La pluralité des voix n'est pas une preuve, pour les vérités malaisées à découvrir, tant il est bien plus vraisemblable qu'un homme seul les ait rencontrées que tout un peuple.» [ René Descartes ] - Discours de la méthode

Discussions similaires

  1. Requête SQL table éléments archivés
    Par fredco74 dans le forum Langage SQL
    Réponses: 7
    Dernier message: 14/08/2014, 17h16
  2. Réponses: 7
    Dernier message: 11/05/2011, 14h51
  3. [ DB2 ] [ AS400] requête sql
    Par zinaif dans le forum DB2
    Réponses: 6
    Dernier message: 23/08/2008, 19h42
  4. Utilisation de MAX dans une requête SQL
    Par Evil onE dans le forum Langage SQL
    Réponses: 7
    Dernier message: 15/06/2004, 18h38
  5. Requête SQL
    Par Leludo dans le forum Langage SQL
    Réponses: 2
    Dernier message: 17/02/2003, 16h44

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