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

Requêtes MySQL Discussion :

Selectionner une ligne juste apres


Sujet :

Requêtes MySQL

  1. #1
    Nouveau membre du Club
    Profil pro
    Lycéen
    Inscrit en
    Mars 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mars 2009
    Messages : 28
    Points : 25
    Points
    25
    Par défaut Selectionner une ligne juste apres
    Bonjour, j'utilise mysql avec php et je fais un site de sondage. Je selectionne mon sondage avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM sondages WHERE nom = 'mon_nom' LIMIT 1
    Cela marche très bien.

    Le problème est que j'aimerais faire un lien "suivant" qui sélectionne la ligne juste en dessous (et un lien "precedant" qui sélectionne la ligne juste au dessus) dans l'ordre alphabétique des noms.

    Je pourrais faire cela en php avec une boucle de "mysql_fetch_array()" mais je pense que cela me prendrait plus de ressources qu'une requette sql.

    Comment faire cela avec sql ?

    Merci de me répondre

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 144
    Points : 145
    Points
    145
    Par défaut
    Bonjour,

    et un mix entre les 2 ? C'est-à-dire tu utilises
    pour obtenir les enregistrements précédent, actuel et suivant

    Puis tu les lis avec mysl_fetch_array et tu interprêtes leur position en PHP
    (c'est plus rapide à programmer, et un limit 3 ne consomme pas beaucoup de ressources)

  3. #3
    Nouveau membre du Club
    Profil pro
    Lycéen
    Inscrit en
    Mars 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mars 2009
    Messages : 28
    Points : 25
    Points
    25
    Par défaut
    Mais le probleme est que le nom de chaque question est unique. Donc même avec "LIMIT 3" j'obtiens 1 résultat.

    Il faudrait une fonction sql permettant de selectionner la ligne juste apres...

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 144
    Points : 145
    Points
    145
    Par défaut
    Rebonjour,

    détaille-nous un peu tes champs et ta requête.
    Il y a des chances qu'il te manque un

  5. #5
    Nouveau membre du Club
    Profil pro
    Lycéen
    Inscrit en
    Mars 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mars 2009
    Messages : 28
    Points : 25
    Points
    25
    Par défaut Précision
    Ma table est composée des champs suivants :

    ID int(1) Non aucune auto_increment
    cat varchar(63) utf8_general_ci Non aucune
    nom varchar(63) utf8_general_ci Non aucune
    quest tinytext utf8_general_ci Non aucune
    choi1 varchar(127) utf8_general_ci Non aucune
    choi2 varchar(127) utf8_general_ci Non aucune
    choi3 varchar(127) utf8_general_ci Non aucune
    choi4 varchar(127) utf8_general_ci Non aucune
    choi5 varchar(127) utf8_general_ci Non aucune
    date date

    La requette
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT * 
    FROM  `questions` 
    WHERE nom =  'nom_quest'
    ne donne qu'1 résultat (ou 0 si la question n'existe pas)

    Donc meme si je rajoute un ORDER et un LIMIT sa ne change rien vu que chaque nom est unique...

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 144
    Points : 145
    Points
    145
    Par défaut
    Merci,

    Si je comprends bien, `nom` est unique. Dans ce cas, c'est vrai que le LIMIT 3 ne sert pas à grand chose...

    Mais alors quel est ton ordre de tri ? Le ID ? C'est alors sur celui-là qu'il faut chercher avec ID +1 et ID - 1.

    Essaye :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT t2.ID, t2.cat, t2.nom, t2.quest, t2.choi1, t2.choi2
    FROM `questions` AS t1
    LEFT JOIN `questions`  AS t2 ON t2.ID >= (t1.ID - 1) AND t2.ID <= (t1.ID + 1) 
    WHERE t1.nom =  'nom_quest'

  7. #7
    Nouveau membre du Club
    Profil pro
    Lycéen
    Inscrit en
    Mars 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mars 2009
    Messages : 28
    Points : 25
    Points
    25
    Par défaut
    Merci de ta réponse.

    Mais l'ordre de classement est défini par l'utilisateur (soit par date, soit par ordre alphabétique des questions)... et donc l'ID ne sera pas dans le bon ordre..

  8. #8
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 018
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 018
    Points : 23 710
    Points
    23 710
    Par défaut
    Bonjour,

    Il faut faire la recherche selon le nom...
    Il faut aussi une version de MySQL qui accepte les sous-requêtes pour pouvoir le faire en une seule requête (et si la table est volumineuse, les performances seront dégradées).
    Ca doit donner quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT q.nom, (SELECT min(q1.nom)
    FROM questions q1
    WHERE q1.nom > q.nom) AS suivant,
    (SELECT max(q2.nom)
    FROM questions q2
    WHERE q2.nom < q.nom) AS precedent
    FROM questions q
    WHERE q.nom =  'nom_quest'
    Cette requête renvoie une seule ligne avec 3 colonnes : le nom recherché, son successeur et son prédécesseur.

    Pour ramener 3 lignes, il faut adapter cette requête selon celle proposée par papa6, mais en la basant sur le nom plutôt que sur l'id

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 144
    Points : 145
    Points
    145
    Par défaut
    Citation Envoyé par ced Voir le message
    Pour ramener 3 lignes, il faut adapter cette requête selon celle proposée par papa6, mais en la basant sur le nom plutôt que sur l'id
    Non non, c'est ta réponse, ced, qui est la meilleure

  10. #10
    Nouveau membre du Club
    Profil pro
    Lycéen
    Inscrit en
    Mars 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mars 2009
    Messages : 28
    Points : 25
    Points
    25
    Par défaut
    C'est bon cela marche grâce à vous ! Merci de vos réponses !

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

Discussions similaires

  1. [VB.net] selectionner une ligne DataGrid
    Par MichMich29 dans le forum ASP.NET
    Réponses: 11
    Dernier message: 31/05/2007, 20h36
  2. [FLASH 8] Selectionner une ligne dans une List
    Par Bb_TiTi dans le forum Flash
    Réponses: 1
    Dernier message: 02/01/2006, 17h47
  3. selectionner une ligne au hasard dans une table
    Par dark_vidor dans le forum Requêtes
    Réponses: 2
    Dernier message: 27/06/2005, 12h01
  4. Réponses: 6
    Dernier message: 24/01/2005, 11h06
  5. [JEditorPane]Selectionner une ligne
    Par )3lade dans le forum Composants
    Réponses: 8
    Dernier message: 20/01/2004, 10h29

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