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 :

Problème de Order by dans une requête


Sujet :

Requêtes MySQL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 11
    Points : 7
    Points
    7
    Par défaut Problème de Order by dans une requête
    Bonjour à tous,

    J'aimerais effectuer une requête de ce genre sous MySql :

    select * from poissons where (((11) >= ph_min and (11) <= ph_max)) or (((9)>= durete_min and (9) <= durete_max)) or (((8 >= temp_min and (8)<= temp_max)) order by IIf(11 >= ph_min and 11 <= ph_max,IIf(9 >= durete_min and 9 <= durete_max, IIf(8 >= temp_min And 8 <= temp_max,'3','2'),IIf (8 >= temp_min and 8 <= temp_max,'2','1')),IIf(9 >= durete_min and 9 <= durete_max,IIf(8 >= temp_min and 8 <= temp_max,'2','1'),'1')) DESC);

    Le "order by" permet de classer les résultats de la requête par ordre décroissant de fiabilité.iabilité en moins : http://www.eau12.com/exoops/modules/freecontent/content/poissons/recherche.php

    Un apperçu de ce que je veux faire le classement par f

    Cette requête fonctionne sous Access mais pas sous MySql !

    C'est certainement parce que le IIf ne convient pas. Quelle est la syntaxe du If sous MySql ? Est-ce que pareille requête peut tourner sous Access ?

    Si oui : comment puis-je modifier ma requête ?
    si non : comment pourrais-je faire autrement que par une requête ?

    Merci d'avance pour vos réponses.

    Showa
    Showa

  2. #2
    Membre du Club
    Inscrit en
    Avril 2002
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 44
    Points : 43
    Points
    43
    Par défaut
    Je ne referais pas ta formule car elle est quand même longue.

    Néanmoins, ce que tu souhaites faire est possible via la fonction "CASE" :

    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT id_produit, prix_achat, 
    CASE prix_vente_part
    WHEN 10 OR 12 THEN '0'
    WHEN 15 THEN '1'
    END AS formule
    FROM prix
    Chaque WHEN correspond à tes IIf et après, à toi de jouer avec les THEN et ELSE pour arriver au même résultat que ta formule Access.

    Bon courage !
    www.ferraridefrance.com - www.autoccaz.com
    DELPHI 4-5-6-7, PHP 4, VB 4-5-6, J2EE, ADA, C++, SIEBEL 7, COBOL... DB2 OS/390, Access...

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Merci de m'avoir répondu, mixi.

    Ma requête est malheureusement beaucoup plus complexe que ton exemple et je ne vois vraiment pas comment goupiller tout ça !

    Je ne vois pas comment je peux replacer le case dans mon cas !

    Ne serait-il pas possible de faire quelque chose du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT *
    FROM poissons
    WHERE (ph_min <= 11 and ph_max >= 11) or (durete_min <= 15 and durete_max >= 15) or (temp_min <= 8 and temp_max >= 8)
    ORDER BY
    IF (ph_min <= 11 and ph_max >= 11) THEN i=i+1
    IF (durete_min <= 15 and durete_max >= 15) THEN i=i+1
    IF (temp_min <= 8 and temp_max >= 8)  THEN i=i+1
    Si quelqu'un a une idée.
    Showa

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    J'ai trouvé la solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select * from poissons where (11 >= ph_min and 11 <= ph_max) or (15 >= durete_min and 15 <= durete_max) or (8 >= temp_min and 8 <= temp_max) order by (If(11 >= ph_min and 11 <= ph_max,If(15 >= durete_min and 15 <= durete_max, If(8 >= temp_min And 8 <= temp_max,'3','2'),If (8 >= temp_min and 8 <= temp_max,'2','1')),If(9 >= durete_min and 9 <= durete_max,If(8 >= temp_min and 8 <= temp_max,'2','1'),'1'))) DESC
    Showa

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

Discussions similaires

  1. problème avec l'apostrophe dans une requête
    Par mika0102 dans le forum VBA Access
    Réponses: 7
    Dernier message: 09/03/2019, 16h51
  2. Clause ORDER BY dans une requête imbriquée
    Par As2piK dans le forum Langage SQL
    Réponses: 2
    Dernier message: 13/02/2008, 09h35
  3. Problème de maj/min dans une requête
    Par ruff15 dans le forum DB2
    Réponses: 9
    Dernier message: 11/10/2007, 21h06
  4. problème classement de date dans une requête
    Par heteroclite dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 15/10/2006, 15h55
  5. Problème select MAX(annee) dans une requête
    Par grisounette dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 28/10/2004, 17h36

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