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 :

Requete Select impossible à faire


Sujet :

Requêtes MySQL

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Webdesigner
    Inscrit en
    Janvier 2021
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Janvier 2021
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Requete Select impossible à faire
    Bonjour,

    Je dois faire une requête SQL en select mais je n'y arrive pas...

    Elle doit permettre d'afficher une ligne de résultat que SI au moins un résultat est différent de "NC" ou "" (donc chez moi un nombre)

    Sachant qu'il existe huit champs ou il est possible d'avoir ces valeurs (voir screen bdd hw_cpuz à hw_others)

    Voila la requête que j'ai essayer mais elle n'affiche pas toutes les lignes


    Nom : Capture.PNG
Affichages : 86
Taille : 21,9 Ko

    Nom : Capture3.PNG
Affichages : 80
Taille : 44,0 Ko

    Nom : Capture2.PNG
Affichages : 84
Taille : 94,9 Ko


    Et je dois faire 2 requête quasi identique

    - Dernière remontée par machine (hardtemp.hardware_id)

    - Toutes les remontées par machine

  2. #2
    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 561
    Points
    38 561
    Billets dans le blog
    9
    Par défaut
    Bonjour

    Savez vous qu'il existe d'autres types de données que le varchar... et d'autres longueurs que 255 ?

    Une date doit être de type date !!!

    Sinon, pour vérifier qu'il existe une valeur égale à "NC" il faut utiliser EXISTS.

    Et pour faire les jointures, il existe l'opérateur JOIN depuis une vingtaine d'années

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Webdesigner
    Inscrit en
    Janvier 2021
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Janvier 2021
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Oui il en existe d'autres cependant étant donné la nature des valeurs de ces champs, on ne pourrait pas mettre par exemple du INT.

    Pour la date en effet, ce serait surement plus efficace, j'en ai fais part au concepteur de la BDD.

    Quant à la requête j'en ai déjà tester plusieurs avec EXISTS mais je n'ai pas réussi.
    Auriez-vous une requête concrète ? Ou même adapté a ma table si possible.

    Les jointures aussi, je connaissais, je vais vérifier que ca fonctionne pour moi.

    Merci de répondre en tout cas.

  4. #4
    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 561
    Points
    38 561
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Citation Envoyé par Galaxiin Voir le message
    Bonjour,

    Oui il en existe d'autres cependant étant donné la nature des valeurs de ces champs, on ne pourrait pas mettre par exemple du INT.
    Il semble que ces colonnes contiennent soit une valeur numérique, soit "NC" (comme non communiqué ou non calculé je suppose)
    Auquel cas, plutôt que d'utiliser un type varchar(255) pénalisant les perfs, il suffit d'utiliser un CASE pour afficher "NC" si souhaité quand la colonne est marquée null.



    Citation Envoyé par Galaxiin Voir le message
    Pour la date en effet, ce serait surement plus efficace, j'en ai fais part au concepteur de la BDD.
    Avoir une colonne (var)char pour une date
    • ouvre la porte à des données autres que des dates ou stockées de façons différentes (tantôt JJ-MM-AAAA, tantôt AAAA/MM/JJ, tantôt JJ.MM.AA etc.)
    • compromet l'utilisation des fonctions de date sauf au travers de conversions de type coûteuses en CPU
    • compromet le tri sur la colonne si le choix du format de stockage met le jour en première position
    • encombre inutilement la bases de données : un type date est moins encombrant qu'un char ou varchar équivalent




    Citation Envoyé par Galaxiin Voir le message
    Quant à la requête j'en ai déjà tester plusieurs avec EXISTS mais je n'ai pas réussi.
    Dans le sujet qui concerne la recherche d'un élément le plus récent ou ancien de mon blog ICI, la méthode 2 utilise EXISTS

  5. #5
    Membre éprouvé
    Femme Profil pro
    Service informatique presque à moi seule (TPE), ex-architecte fonctionnel
    Inscrit en
    Août 2017
    Messages
    358
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 56
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Service informatique presque à moi seule (TPE), ex-architecte fonctionnel
    Secteur : Finance

    Informations forums :
    Inscription : Août 2017
    Messages : 358
    Points : 931
    Points
    931
    Par défaut
    Citation Envoyé par Galaxiin Voir le message
    Voila la requête que j'ai essayée mais elle n'affiche pas toutes les lignes
    Le critère sur "" NOT IN et "NC" NOT IN ne peut pas fonctionner car il ne prend pas en compte le NULL et le "OR" ne convient pas ; si j'ai bien compris il faut tester si au moins une colonne est différente de "NC" ET de "", là le test c'est : toutes les colonnes sont différentes de "NC" (et ne valent pas NULL) OU toutes les colonnes sont différentes de "" (et ne valent pas NULL) ; il aurait aussi fallu des parenthèses autour des deux dernières conditions pour s'assurer que tous les résultats vérifient les conditions précédentes - mais de toute façon elles sont bien mieux à leur place dans une jointure (oui, c'est pris en charge dans MariaDB depuis... euh, longtemps . Il peut y avoir des écarts de performances selon que les tables sont en InnoDB ou MyIsam) :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     select hardware.id, (...)
    from hardtemp 
    INNER JOIN hardware ON hardware.id = hardtemp.hardware_id 
    INNER JOIN accountinfo ON accountinfo.hardware_id = hardtemp.hardware_id 
     
    where (  (     coalesce(hardtemp.hw_cpuz, "") != "NC"
                        and coalesce(hardtemp.hw_cpuz, "") != "" )
                   OR (     coalesce(hardtemp.hw_gfxy, "") != "NC"
                        and coalesce(hardtemp.hw_gfxy, "") != "") 
                 (...)
     )
    Attention cet exemple élimine aussi les colonnes de valeur NULL (au moins c'est fait explicitement )
    La requête doit ramener les valeurs des colonnes à tester, c'est pourquoi je doute de l'avantage d'une clause EXISTS.
    Les problèmes sont des opportunités en vêtements de travail. Henry H. Kaiser
    Il n'est pas de problème dont une absence de solution ne finisse par venir à bout. Henri Queuille

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Webdesigner
    Inscrit en
    Janvier 2021
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Janvier 2021
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Solution trouve
    Désolé du retard. Voila j'ai réussi avec les plusieurs consignes que j'ai reçues sur les forum avec cette requete

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    SELECT hd.id, hd.name, hd.lastcome, a.tag, ht.hw_cpuz, ht.hw_gfxz, ht.hw_extz, ht.hw_locz, ht.hw_batz, ht.hw_pchz, ht.hw_tz0, ht.hw_others
     
    FROM hardtemp ht join hardware hd on (ht.HARDWARE_ID = hd.ID) join accountinfo a on	(hd.ID = a.HARDWARE_ID)
     
    WHERE ht.hw_cpuz not in ("NC","")
    or ht.hw_gfxz not in ("NC","")
    or ht.hw_extz not in ("NC","")
    or ht.hw_locz not in ("NC","")
    or ht.hw_batz not in ("NC","")
    or ht.hw_pchz not in ("NC","")
    or ht.hw_tz0 not in ("NC","")
    or ht.hw_others not in ("NC","")
     
    GROUP BY ht.hardware_id

Discussions similaires

  1. Requete Select impossible à faire
    Par Galaxiin dans le forum Bases de données
    Réponses: 2
    Dernier message: 14/01/2021, 17h18
  2. Requete Select Impossible
    Par benny-blanco dans le forum Développement
    Réponses: 2
    Dernier message: 10/03/2012, 20h16
  3. Requete select pour faire un Update
    Par tralala2 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 03/10/2009, 16h11
  4. Réponses: 6
    Dernier message: 09/11/2006, 14h19
  5. requete SELECT avec un nombre constant
    Par gurumeditation dans le forum Requêtes
    Réponses: 3
    Dernier message: 04/07/2003, 20h04

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