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 :

if then else et plusieurs tables


Sujet :

Requêtes MySQL

  1. #1
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 385
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 385
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut if then else et plusieurs tables
    Bonjour,

    j'ai 2 tables T1 et T2 et je voudrais extraire les données d'une colonne de T1 seulement si la donnée correspondante de T2 vérifie une certaine condition (les 2 tables sont reliées par clé étrangère). Mes essais provoquent plein de messages d'erreur donc je suis loin du compte.

    Voici quelques détails :

    table "tickets" :
    tickets.sql :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    CREATE TABLE IF NOT EXISTS `tickets` (
      `id` varchar(18) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL,
      `Product_Name` varchar(25) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL,
      `Assigned_Group` varchar(30) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL,
      `Submitted_Date` datetime NOT NULL,
      `Last_Resolved_Date` datetime NOT NULL,
      `Prioritytype` smallint(2) NOT NULL,
      `Statustype` smallint(3) NOT NULL,
      `Area` varchar(10) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL,
      `Country` varchar(10) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL,
      `Submitter_SESA` int(6) NOT NULL,
      `Custommer_SESA` int(6) NOT NULL,
      `Organization` varchar(20) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL,
      `Incident_Type` varchar(20) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL,
      `Reported_Source` varchar(20) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL,
      PRIMARY KEY (`id`),
      KEY `Prioritytype` (`Prioritytype`),
      KEY `Statustype` (`Statustype`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

    table "statustype" :
    statustype.sql :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE TABLE IF NOT EXISTS `statustype` (
      `id` smallint(3) NOT NULL AUTO_INCREMENT,
      `name` varchar(13) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL DEFAULT '',
      PRIMARY KEY (`id`),
      UNIQUE KEY `name` (`name`)
    ) ENGINE=InnoDB AUTO_INCREMENT=31 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

    et ce que je voudrais faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    IF ((statustype.id != 4)AND(statustype.id)!=5)) THEN
    {
    SELECT tickets.Last_Resolved_Date FROM tickets
    ELSE SELECT NULL //dans ce cas, la valeur n'a aucun sens donc on affiche 0
    }
    sauf que je n'ai aucune idée de la requête qu''il faudrait faire...
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 801
    Points
    30 801
    Par défaut
    Ce qui serait intéressant, ce serait de connaître les requêtes testées et les messages d'erreur reçus...
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 385
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 385
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    en fait, je n'ai rien gardé en mémoire. J'y retravaille donc dans la soirée puis en rendrai compte...
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  4. #4
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    et tu continues avec latin1 !!
    tu le fais exprès ou quoi ?

  5. #5
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 385
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 385
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par rawsrc Voir le message
    tu le fais exprès ou quoi ?
    Ben oui
    Honnêtement, je croyais l'avoir corrigé, mais par exemple, pour tickets.sql, y a que la ligne 19 de corrigée, mais pas toutes celles relatives au colonnes. Je ne vois que le moyen de le changer colonne par colonne. Peut-on le faire directement ?
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  6. #6
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 385
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 385
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    J'ai tenté une requête simplifiée par rapport à mon but, mais déjà une erreur :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    IF NOT(statustype.id=4)
    select DATE_FORMAT(Last_Resolved_Date,"%Y/%m") from tickets 
    END IF

    1.Type d'énoncé non reconnu. (near "IF" at position 0)
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  7. #7
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 385
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 385
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    Comme je savais atteindre mon but avec du code PHP en plus des requêtes SQL, je l'ai fait, mais je reste intéressé par une méthode full-SQL, ce qui serait plus optimisé...

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $pdo=new PDO();
    $res=$pdo->select('SELECT Prioritytype from `tickets`',[]);
    if (($res!=4)&&($res!=5))
        $var=$pdo->select('select DATE_FORMAT(Last_Resolved_Date,"%Y/%m") as date from tickets',[]);
    else $var=NULL;
    echo "var=".$var[0]['date'];

    La méthode select (de rawsrc) exécute la requête SQL (avec PDO), puis fait un fetchALL, qu'elle retourne.
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  8. #8
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 801
    Points
    30 801
    Par défaut
    Je n'ai toujours pas compris ce que tu cherchais à faire
    Si c'est une requête avec un nombre de colonnes variables, le langage SQl n'est pas adapté.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  9. #9
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 385
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 385
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    Non, je suis quasiment sûr que c'est faisable en SQL :

    voici le pseudo-code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    IF (NOT(Statustype=4) AND NOT(Statustype=5))
    {
        select DATE_FORMAT(Last_Resolved_Date,"%Y/%m") as date from tickets;
    }
    ELSE
        return 0;
    Statustype est une colonne de la table tickets.
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  10. #10
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 801
    Points
    30 801
    Par défaut
    Dans ce goût là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    select  date_format(last_resolved_date, "%Y/%m") as date
    from    tickets
    where   statustype  not in (4,5)
    union all
    select  0
    from    tickets
    where   statustype  not in (4,5)
    having  count(1)    = 0
    ;
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  11. #11
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 385
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 385
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    On est pas loin. Déjà, si je comprends bien les 3 premières lignes, après, non. Pourrais-tu les expliquer ?

    Mais c'est pas parfait ; j'ai fait des essais avec 2 enregistrements.

    Je te mets à chaque fois 4 lignes :
    1 et 2- les 2 colonnes qui nous intéressent pour les 2 enregistrements (je mets que les années)
    3- ce qu'on obtient
    4- ce que je souhaiterais.

    Last_Resolved_Date StatusType
    2019 5
    2020 5

    obtenu : 0
    souhaité : 0 0

    2019 1
    2020 5

    obtenu : 2019
    souhaité : 2019 0

    2019 5
    2020 1

    obtenu : 2020
    souhaité : 0 2020

    2019 1
    2020 1

    obtenu : 2019 2020
    souhaité : 2019 2020

    Merci d'avance.
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  12. #12
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 801
    Points
    30 801
    Par défaut
    Tu présentais une requête avec une seule colonne et maintenant tu attends un résultat sur deux colonnes
    Quand tu sauras exprimer clairement ton besoin, tu auras déjà fait la moitié du travail.
    En attendant je laisse à d'autres le soin de te répondre. Moi j'abandonne.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  13. #13
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    bonjour,

    Pas trés clair en effet, mais je vais tenter ma chance avec ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT CASE WHEN  statustype  NOT IN (4,5) THEN  DATE_FORMAT(Last_Resolved_Date,"%Y/%m") ELSE 0 END as date 
    FROM tickets;

  14. #14
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 385
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 385
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    besoin pas clair, mais tu l'as quand même compris
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  15. #15
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 153
    Points : 7 403
    Points
    7 403
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par aieeeuuuuu Voir le message
    bonjour,

    Pas trés clair en effet, mais je vais tenter ma chance avec ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT CASE WHEN  statustype  NOT IN (4,5) THEN  DATE_FORMAT(Last_Resolved_Date,"%Y/%m") ELSE 0 END as date 
    FROM tickets;
    En fait, la réponse d'Alain était bonne aussi... au détail près du having qui n'avait rien à faire là.

    A voir maintenant ce qui est le plus rapide... probablement le CASE WHEN ceci dit.
    On ne jouit bien que de ce qu’on partage.

  16. #16
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 385
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 385
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    Je réouvre cette discussion, car, satisfait, je l'avais mise de côté pour faire autre chose, mais je la reprends et ça ne marche plus !

    La requête est :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT CASE WHEN  `statustype`  NOT IN (4,5) THEN  DATE_FORMAT(Last_Resolved_Date,"%Y/%m") ELSE 0 END as date 
          FROM `tickets`
    donc la table ticket contient une clé étrangère vers la table statustype et le problème, c'est que même si cette clé vaut 4 ou 5, la requête retourne une date et non 0 ! Cette requête est-elle correcte ?
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  17. #17
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 385
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 385
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    En désespoir de cause, je me tourne vers ma solution qui mixe le PHP et le SQL, mais c'est sûr que c'est pas optimisé, donc si vous avez mieux, je suis preneur...

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     $res=$pdo->select('SELECT Statustype FROM `tickets` t where t.id="'.$_POST['id'].'"',[]);
     
        $status=$res[0]['Statustype'];
        if (($status!=4)&&($status!=5))
            $var=$pdo->select('select DATE_FORMAT(Last_Resolved_Date,"%Y/%m") as date FROM `tickets` t where t.id="'.$_POST['id'].'"',[]);
        else $var=NULL;
        echo "var=";
        if ($var==NULL) echo "0"; else echo $var[0]['date'];echo "<br/>";
    Pour exécuter les requêtes MySql en PHP, j'utilise une classe héritée de la classe PDO.
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  18. #18
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par laurentSc Voir le message
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT CASE WHEN  `statustype`  NOT IN (4,5) THEN  DATE_FORMAT(Last_Resolved_Date,"%Y/%m") ELSE 0 END as date 
          FROM `tickets`
    donc la table ticket contient une clé étrangère vers la table statustype et le problème, c'est que même si cette clé vaut 4 ou 5, la requête retourne une date et non 0 ! Cette requête est-elle correcte ?
    Il faudrait être clair dans votre expression de besoin...
    D'une part, vous parlez de la table "statustype", or, statustype est une colonne
    D'autre part, votre requête met en forme une date au format "CCAA/MM" pour toute autre valeur de statustype que "4" et "5" et non pas même si les valeurs sont 4 ou 5...
    Si vous voulez que les valeurs 4 et 5 produisent un résultat égal à zéro, alors il suffit de remplacer NOT IN (4,5) par IN (4,5).
    Enfin, votre code PHP présente pour seule différence de remplacer zéro par null, ce qui peut être avantageusement exécuté directement dans la requête.

  19. #19
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 153
    Points : 7 403
    Points
    7 403
    Billets dans le blog
    1
    Par défaut
    Aussi, vous parlez d'une table de référence "statustype"... donc 4 et 5 sont des "valeurs" de "statustype" ou des identifiants de "statustype" ?
    On ne jouit bien que de ce qu’on partage.

  20. #20
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Citation Envoyé par laurentSc Voir le message
    le problème, c'est que même si cette clé vaut 4 ou 5, la requête retourne une date et non 0 !

    C'est tout à fait normal : un colonne possède un type, bien entendu, le même pour toutes les lignes . Ici, le type de retour du CASE WHEN est celui de Last_Resolved_Date, en raison de la précédence de son type par rapport à à un INT (le 0 ).

    vous ne pouvez pas, dans une colonne, renvoyer tantôt des dates, tantôt des entiers.
    Comme évoqué par escartefigue, le mieux serait alors de remplacer le 0 par un NULL et de la traiter ensuite en PHP

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Problème avec plusieurs if then else imbriqués
    Par Beauserge dans le forum Langage
    Réponses: 13
    Dernier message: 16/05/2017, 19h36
  2. Requête complexe sur plusieurs table
    Par DenPro dans le forum Langage SQL
    Réponses: 13
    Dernier message: 25/11/2003, 17h50
  3. A propos d'une requête SQL sur plusieurs tables...
    Par ylebihan dans le forum Langage SQL
    Réponses: 2
    Dernier message: 14/09/2003, 16h26
  4. Une seule table VS plusieurs tables
    Par LostControl dans le forum Requêtes
    Réponses: 1
    Dernier message: 11/08/2003, 10h56
  5. [SQL] Sélection ds plusieurs table
    Par lord_paco dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 24/07/2003, 17h53

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