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

 MySQL Discussion :

Sortir une valeur unique DISTINCT (résolu) [MariaDB]


Sujet :

MySQL

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    269
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 269
    Par défaut Sortir une valeur unique DISTINCT (résolu)
    Bonjour
    J'ai mis une requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT '' as value, '- choisir une structure -' as text
    UNION ALL
    SELECT item_id as value,  value as text   
    FROM #__fields_values 
    WHERE `field_id`='10'
    qui me renvoit
    TOTO
    TOTO

    Je souhaite afficher les seules valeurs unique. J'ai donc ajouté DISTINCT comme le fait https://www.w3schools.com/Sql/trysql...elect_distinct
    Cela ne fonctionne pas et cela plante la page de ma page du cms joomla. Je n'ai pas de message d'erreur
    Pouvez-vous m'aider?

    Dans la page système de joomla, je vois "10.2.44-MariaDB"

  2. #2
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 315
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 315
    Billets dans le blog
    17
    Par défaut
    Montre la requête avec le DISTINCT
    et donne-nous un jeu de données nous permettant de reproduire la situation

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    269
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 269
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     field_id 	item_id value 	
    10 	        48 	TOTO
    10 	        51 	TOTO
    10            67	TITI
    C'est celà le jeu de données ?
    Pour info , je saisi manuellement dans le backoffice de joomla ces valeurs une par une pour le test bien sûr

    Pour DISTINCT, en fait j'ai testé tout ce qui me passait par la tête mais sans résultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT DISTINCT item_id as value,  value as text   
    ou
    SELECT item_id as value, DISTINCT  value as text   
    ou
    SELECT DISTINCT value as text
    Après la requête complète finale attendue est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT '' as value, '- choisir une structure -' as text
    UNION ALL
    SELECT item_id as value,  value as text   
    FROM #__fields_values 
    WHERE `field_id`='10'
    j'espère que cela aide.a

  4. #4
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 315
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 315
    Billets dans le blog
    17
    Par défaut
    Après la requête complète finale attendue est:
    C'est les lignes constituant le *résultat* de ton jeu de test dont on a besoin.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    269
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 269
    Par défaut
    Désolé je ne comprends pas la remarque après mon " Après la requête complète finale attendue est:"
    C'est les lignes constituant le *résultat* de ton jeu de test dont on a besoin.
    je ovulais dire qu'à la fin j'ai besoin de mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT '' as value, '- choisir une structure -' as text
    UNION ALL
    mais on ne est pas là.
    je ne vois rien de plus à donner

    J'ai déjà fait des requêtes (il y a longtemps), je me demandais si c'était une erreur de syntaxe dans mes lignes SELECT ou un problème avec [mariaDb] que je ne connais pas, qui aurait des syntaxes différentes de MySQL?

  6. #6
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 315
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 315
    Billets dans le blog
    17
    Par défaut
    je ne vois rien de plus à donner
    Ton SQL va produire un résultat. J'ai besoin du résultat que *tu attends* pour le jeu de données que tu as communiqué plus haut.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    field_id 	item_id value 	
    10 	        48 	TOTO
    10 	        51 	TOTO
    10            67	TITI
    Et oui il peut y avoir des différences de syntaxe entre MySQL et MariaDB, mais pas ici a priori.

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    269
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 269
    Par défaut
    Si je comprends bien ??
    Le résultat attendu qui devrait d'afficher serait
    C'est ça :-)

  8. #8
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 315
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 315
    Billets dans le blog
    17
    Par défaut
    Entrée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    field_id	item_id	value 	
    10		48	TOTO
    10		51	TOTO
    10		67	TITI
    Sortie attendue :

    Requête à exécuter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT DISTINCT value
    FROM ta_table

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    269
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 269
    Par défaut
    Ok merci
    J'avai testé, mais mon erreur est de ne pas avoir enlevé

    dans la requête complète, cela fonctionne avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT   '- choisir une structure -' as text
    UNION ALL
    SELECT DISTINCT value 
    FROM #__fields_values 
    WHERE `field_id`='10'

  10. #10
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 599
    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 599
    Billets dans le blog
    10
    Par défaut
    bonjour

    SELECT DISTINCT Col1,n Col2, ..., Coln signifie qu'on veut récupérer toutes les combinaisons distinctes des colonnes citées

    Or {48, TOTO} est bel et bien différent de {51, TOTO}

    Donc, soit on ne récupère que la colonne "value" comme l'a proposé Seb, auquel cas on s'affranchit des différentes valeurs de item_id, soit on utilise un agrégat pour ne récupérer par exemple que la plus grande valeur de item_id :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT max(item_id)
         , value
    from ma_table
    group by (value)

    Note : utiliser des noms réservés SQL tels que "VALUE" comme nom de table ou de colonne (ou tout autre objet) est contraignant, ça oblige à encadrer ces noms avec des doubles quotes (la plupart des SGBD) ou des quotes inversées (MySQL, MariaDB).

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    269
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 269
    Par défaut
    Bonsoir

    je reformule :

    Citation Envoyé par escartefigue Voir le message
    Note : utiliser des noms réservés SQL tels que "VALUE" comme nom de table ou de colonne (ou tout autre objet) est contraignant, ça oblige à encadrer ces noms avec des doubles quotes (la plupart des SGBD) ou des quotes inversées (MySQL, MariaDB).
    Si je comprends c'est une note qui s'applique plutôt aux créateurs des tables. Ce qui n'est pas mon cas.
    Même si cela fonctionne, il serait préférable que je prenne l'habitude de mettre " plutôt que ' ?

    Pour l'autre réponse si je comprends bien, c'est pour retourner une seule valeur moi en fait je veux avoir le retour DES valeurs uniques

  12. #12
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 315
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 315
    Billets dans le blog
    17
    Par défaut
    Même si cela fonctionne , il serait préférable que je prenne l'habitude de mettre " plutôt que ' ?
    Attention, ces délimiteurs n'ont pas le même sens et ne sont pas interchangeables

    ' : délimite une chaîne

    Là où ça se complique :

    " :
    Norme SQL, délimite un nom (table, colonne, fonction)
    MySQL le supporte en tant que tel avec l'option ANSI_QUOTES (autrement est considéré comme un délimiteur de chaîne...)
    Ne jamais l'utiliser en tant que délimiteur de chaîne car les requêtes ne seraient plus portables

    ` :
    Propriétaire MySQL, délimite un nom (table, colonne, fonction)
    Préférer " + option ANSI_QUOTES, plus facile à taper/lire et portable

  13. #13
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 599
    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 599
    Billets dans le blog
    10
    Par défaut
    Si on n'utilise aucun mot réservé SQL comme nom d'objet (ce qui est fortement recommandé), on n'a pas besoin d'utiliser ni la quote inversée spécifique à MySQL/MariaDB, ni la double quote et c'est bien plus pratique

    Attention : en cas d'utilisation par erreur du délimiteur d'objet plutôt que du délimiteur de chaîne de caractères, le résultat sera faux si une colonne est nommée avec un mot réservé SQL

    Exemple :

    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
    create table T1
          (  T1IDENT   integer auto_increment  primary key
           , `VIEW`    char(4) not null
          )
    ;
    insert  into T1 (`VIEW`) 
    values ('TRUC'), ('VIEW'), ('1234')
    ;
    select 'CAS1', T1IDENT, VIEW
    from T1
    where VIEW=`VIEW`
    union all 
    select 'CAS2', T1IDENT, VIEW
    from T1
    where VIEW='VIEW'
    ;

    Résultat :

    CAS1 T1IDENT VIEW
    CAS1 1 TRUC
    CAS1 2 VIEW
    CAS1 3 1234
    CAS2 2 VIEW

  14. #14
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    269
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 269
    Par défaut
    Bonjour
    Ok j'a remplacé par ". Joomla a l'air de fonctionner avec les standards ou option ANSI_QUOTES sauf des tables crées par d'autres dev'?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT "" as value, "- tapez ici, les 1ères lettres de la structure -" as text
    UNION ALL
    SELECT id as value, title as text
    FROM #__content
    WHERE catid=16  OR  catid=20
    ORDER BY case value when "" then 1 else 2 end asc , text asc

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 21/01/2015, 09h41
  2. [MySQL-5.1] Modifier les enregistrements dont un champ a une valeur unique
    Par sergeh dans le forum Requêtes
    Réponses: 1
    Dernier message: 04/04/2013, 18h51
  3. remplir une colonne avec une valeur unique
    Par dzougui dans le forum Langage SQL
    Réponses: 1
    Dernier message: 12/05/2011, 13h20
  4. afficher une valeur unique d'un champs requete
    Par salfati dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 06/11/2010, 09h46
  5. [LV 8.6.1] Sortir une valeur d'un VI
    Par Quent' dans le forum LabVIEW
    Réponses: 1
    Dernier message: 27/11/2009, 13h56

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