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

SQL Procédural MySQL Discussion :

Aide pour une requete SQL..


Sujet :

SQL Procédural MySQL

  1. #1
    Membre habitué Avatar de denissay
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 103
    Points : 125
    Points
    125
    Par défaut [Résolu] Aide pour une requete SQL..
    Bonsoir a tous,
    J'ai deux tableaux (parmis d'autres):
    CREATE TABLE `bibli`.`bib_authors` (
    `id` int(3) NOT NULL auto_increment,
    `name` varchar(30) NOT NULL default '',
    `surname` varchar(30) default NULL,
    `ident` varchar(30) default NULL,
    `homepage` varchar(255) default NULL,
    PRIMARY KEY (`id`),
    KEY `name` (`name`),
    KEY `surname` (`surname`),
    KEY `ident` (`ident`),
    KEY `indexed` (`indexed`),
    KEY `valid` (`valid`)
    ) ENGINE=MyISAM AUTO_INCREMENT=38 DEFAULT CHARSET=latin1

    CREATE TABLE `bibli`.`bib_bibs` (
    `ID` int(4) NOT NULL auto_increment,
    `Name` varchar(255) NOT NULL default '',
    `Description` text,
    `nr_pubs` int(4) NOT NULL default '0',
    `id_user_c` int(4) NOT NULL default '0',
    `date_c` datetime default NULL,
    `computer_c` varchar(150) default NULL,
    `id_user_lm` int(4) NOT NULL default '0',
    `date_lm` datetime default NULL,
    `computer_lm` varchar(150) default NULL,
    `access` enum('ALL','GROUP','ME') NOT NULL default 'ME',
    PRIMARY KEY (`ID`),
    KEY `name` (`Name`),
    KEY `access` (`access`),
    KEY `id_user_c` (`id_user_c`),
    KEY `id_user_lm` (`id_user_lm`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1
    Et ma requete et la suivante:
    select distinct concat(bib_authors.name , ' ', bib_authors.surname) as nom, bib_publications.title from bib_authors right join bib_pub_to_auth on bib_authors.id = id_author right join bib_publications on bib_publications.id = id_pub where bib_publications.year = '2005'
    J'obtiens ce résultat:
    --------------------------------------------------
    - name -- title
    --------------------------------------------------
    - John P. -- Selecting preferred...
    - Smith C. -- Selecting preferred...
    - Donald T. -- Eliciting preference...
    - Garry S. -- Eliciting preference...
    - James N. -- Eliciting preference...
    --------------------------------------------------
    Et moi ce que je veux obtenir c'est plutot:
    --------------------------------------------------------------------------------------------------
    - name -- title
    --------------------------------------------------------------------------------------------------
    - John P. Et Smith C. -- Selecting preferred...
    - Donald T., Garry S. Et James N. -- Eliciting preference...
    --------------------------------------------------------------------------------------------------
    J'aimerai avoir ça comme reponse de ma requete sql...
    Je crois qu'il va falloir utiliser les fonctions ou autre...
    Merci d'avance pour votre aide

  2. #2
    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 : 41
    Localisation : France

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

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

    le SQL n'est pas vraiment fait pour faire de la cosmétique
    il est plus facile de faire cette présentation avec le langage que tu utilises

  3. #3
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 284
    Points : 11 738
    Points
    11 738
    Par défaut
    c'est un GROUP_CONCAT, auquel il faudra rajouter un remplacement de la dernière virgule par ET.

  4. #4
    Membre habitué Avatar de denissay
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 103
    Points : 125
    Points
    125
    Par défaut
    C'est exactement ce que je voulais....
    Merci bcp...
    Et t'as pas une idée de comment changer la dernière virgule en "et" parce que moi je ne vois pas comment...
    Merci d'avance

  5. #5
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 284
    Points : 11 738
    Points
    11 738
    Par défaut
    La position de la dernière virgule est donnée par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    locate(',', reverse('Donald T., Garry S., James N.') )
    La fin de la chaîne (après le ET) est donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    right('Donald T., Garry S., James N.', locate(',', reverse('Donald T., Garry S., James N.') ) - 1)
    Et le début de la chaîne est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    substring('Donald T., Garry S., James N.' 
      FROM 1 
      FOR char_length('Donald T., Garry S., James N.') - locate(',', reverse('Donald T., Garry S., James N.') ) )
    Ce qui nous donne donc au final :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    select concat(substring('Donald T., Garry S., James N.' 
        FROM 1 
        FOR char_length('Donald T., Garry S., James N.') 
          - locate(',', reverse('Donald T., Garry S., James N.') ) ),
      ' et',
      right('Donald T., Garry S., James N.', locate(',', reverse('Donald T., Garry S., James N.') ) - 1)
      );
    Mais pour être franc, je rejoins ici l'avis de Cybher, remplacer la dernière virgule par un ET, c'est de la cosmétique qui sera plus facilement faite en PHP ou autre.

  6. #6
    Membre habitué Avatar de denissay
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 103
    Points : 125
    Points
    125
    Par défaut
    Merci pour le code...Mais je crois que je vais plutot le faire en php...
    J'ai encore une problème d'affichage des noms comportant des accents.....
    Il m'affiche des caractères bizzards :
    Géraldine === G鲡ldine
    François === Fran篩s
    J'ai effectuer une petite recherche sur le forum, et on conseillait d'utiliser "" ou []:
    http://www.developpez.net/forums/sho...ghlight=accent

    Mais il m'affiche une erreur dans la syntaxe de ma requete....

  7. #7
    Membre habitué Avatar de denissay
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 103
    Points : 125
    Points
    125
    Par défaut
    J'ai trouvé, puisqu'il sagissait de créer un document XML, il suffisait d'ajouter ce qui est en rouge:
    // create a new XML document
    $doc = new DomDocument('1.0', 'ISO-8859-1');

    // add a child node for each field
    .
    .(some code)
    .
    $value = $doc->createTextNode(utf8_encode($fieldvalue));
    Merci pour votre aide

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

Discussions similaires

  1. Aide pour une requete SQL
    Par gimpycpu dans le forum Langage SQL
    Réponses: 0
    Dernier message: 09/11/2007, 18h50
  2. Besoin d'aide pour une requete SQL
    Par fabris dans le forum Requêtes
    Réponses: 15
    Dernier message: 02/05/2006, 17h03
  3. Besoin d'aide pour une requete SQL
    Par fabris dans le forum Requêtes
    Réponses: 6
    Dernier message: 10/04/2006, 20h27
  4. Aide pour une requete SQL
    Par hpghost dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 08/01/2005, 15h01
  5. Aide pour une requete SQL
    Par hpghost dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 08/01/2005, 10h15

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