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 :

select du suivant ?


Sujet :

Requêtes MySQL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 27
    Points : 9
    Points
    9
    Par défaut select du suivant ?
    Bonjour, je fais un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM chien WHERE id='$idchoix' AND age='10'
    J'obtiens avec ça le chien que je cherche mais j'aimerais maintenant connaitre l'id du chien suivant qui a aussi age='10' et qui viendrait juste après avec un "ORDER BY nom". Est ce que c'est possible simplement ?

  2. #2
    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 016
    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 016
    Points : 23 705
    Points
    23 705
    Par défaut
    Bonjour,

    Veux-tu les noms des 2 chiens dans la même requête ou dans 2 requêtes consécutives ?

    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

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 27
    Points : 9
    Points
    9
    Par défaut
    Si ce n'est pas plus gourmand en processeur, je voudrais une deuxième requête(merci pour l'édition de mon premier message, je n'avais pas pensé à utiliser la balise)

  4. #4
    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 016
    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 016
    Points : 23 705
    Points
    23 705
    Par défaut
    Et bien une fois que tu as le nom du chien recherché, tu n'as plus qu'à faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT *
    FROM chien
    WHERE age = 10
    AND nom >= '$nom_chien_1'
    AND id <> $id_chien_1
    ORDER BY nom
    LIMIT 1
    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

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 27
    Points : 9
    Points
    9
    Par défaut
    cool merci bcp ! Par curiosité( et si tu as le temps de répondre), la requête unique qui permet d'avoir les deux en même temps, ce serai quoi ?

  6. #6
    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 016
    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 016
    Points : 23 705
    Points
    23 705
    Par défaut
    C'est un peu plus complexe en 1 seule requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT * 
    FROM chien
    WHERE age = 10 AND (id = $idchoix OR nom > (
        SELECT nom
        FROM chien
        WHERE id = $idchoix)
    )
    ORDER BY nom
    LIMIT 2
    Si c'est tout bon, n'oublie pas le

    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

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 27
    Points : 9
    Points
    9
    Par défaut
    ok merci pour l'info. Je vais rester sur ta première solution. Mais j'ai un pbm si deux chiens ont le même nom.
    Exemple avec des chiens qui ont tous age=10 :

    id/nom
    15/medor
    16/medor
    13/rufus

    Si je sélectionne en premier le 15, le suivant annoncé est 16. Je passe ensuite au 16, le suivant annoncé est de nouveau 15 au lieu de 13. Je ne vois pas comment résoudre ce problème

  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 016
    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 016
    Points : 23 705
    Points
    23 705
    Par défaut
    Oooops ...
    Tout bêtement parce que j'ai oublié un = dans ma seconde requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT * 
    FROM chien
    WHERE age = 10 AND (id = $idchoix OR nom >= (
        SELECT nom
        FROM chien
        WHERE id = $idchoix)
    )
    ORDER BY nom
    LIMIT 2
    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
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 27
    Points : 9
    Points
    9
    Par défaut
    Je vais être chiant mais est ce qu'il y a une solution avec ta première solution ? (c'est à dire une deuxième requête séparée)

  10. #10
    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 016
    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 016
    Points : 23 705
    Points
    23 705
    Par défaut
    La première requête n'avait pas d'erreur. Il y a le signe = au niveau du nom, donc elle devrait fonctionner...

    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

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 27
    Points : 9
    Points
    9
    Par défaut
    Quelque chose m'échappe sans doute mais ça ne fonctionne pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT *
    FROM chien
    WHERE age = 10
    AND nom >= '$nom_chien_1'
    AND id <> $id_chien_1
    ORDER BY nom
    LIMIT 1
    Si je reprends l'exemple
    15/medor
    16/medor
    13/rufus
    Je commence à 15, cette requête va me donner id=16.
    Si je pars maintenant de 16, cette requête va me donner 15(puisque 15<>16) or je voudrais 13. Il faudrait que je puisse dire que quand le nom est le même, je ne veux pas d'un id plus petit mais par contre, si le nom est différent je me moque du sens de variation de l'id. Je coince...

  12. #12
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 641
    Points
    4 641
    Par défaut
    salut,

    essaie ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT *
    FROM chien
    WHERE age = 10
    AND (nom = '$nom_chien_1' AND id > $id_chien_1)
    OR (nom > '$nom_chien_1' AND id <> $id_chien_1)
    ORDER BY nom
    LIMIT 1

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 27
    Points : 9
    Points
    9
    Par défaut
    Super cette fois ça marche ! Par contre j'ai rajouté des parenthèses :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    AND ((nom = '$nom_chien_1' AND id > $id_chien_1)
    OR (nom > '$nom_chien_1' AND id <> $id_chien_1))
    Est ce que c'était inutile ? Je pose la question pour savoir si la condition est traitée de droite à gauche ou de gauche à droite et donc est ce qu'il vaut mieux mettre les conditions rapides à traiter et qui éliminent bcp d'enregistrement plutot à droite ou plutot à gauche ?(par exemple ici, le age=10)

  14. #14
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 641
    Points
    4 641
    Par défaut
    salut,

    en effet, il faut ajouter des parenthèses car le AND est prioritaire sur le OR

  15. #15
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 27
    Points : 9
    Points
    9
    Par défaut
    ok, merci bcp à tous les deux !! Je vais ouvrir un nouveau thread pour cette question d'optimisation puisque ça n'a pas de lien avec ma question d'origine.

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

Discussions similaires

  1. SELECT trié suivant un ordre particulier
    Par philnext dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 27/11/2009, 16h14
  2. Selection Onglet Suivant
    Par luige93 dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 11/07/2008, 16h24
  3. selection chiffre suivant
    Par problemeaide dans le forum Excel
    Réponses: 2
    Dernier message: 02/06/2008, 10h44
  4. Réponses: 7
    Dernier message: 17/05/2006, 14h49
  5. Réponses: 2
    Dernier message: 27/10/2005, 15h51

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