Précédent   Forum des professionnels en informatique > Bases de données > MySQL > SQL Procédural
SQL Procédural Forum d'entraide sur les triggers, les procédures stockées et les fonctions en MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 08/11/2007, 19h32   #1
Invité régulier
 
Inscription : mars 2006
Messages : 43
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 43
Points : 8
Points : 8
Par défaut [Résolu] Aide pour une requete SQL..

Bonsoir a tous,
J'ai deux tableaux (parmis d'autres):
Citation:
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:
Citation:
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:
Citation:
--------------------------------------------------
- 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:
Citation:
--------------------------------------------------------------------------------------------------
- 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
batis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/11/2007, 14h24   #2
Modérateur
 
Avatar de Cybher
 
Homme Michel
Consultant informatique
Inscription : mai 2005
Messages : 3 006
Détails du profil
Informations personnelles :
Nom : Homme Michel
Âge : 29
Localisation : France

Informations professionnelles :
Activité : Consultant informatique
Secteur : Conseil

Informations forums :
Inscription : mai 2005
Messages : 3 006
Points : 4 039
Points : 4 039
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
Cybher est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/11/2007, 13h42   #3
Rédacteur/Modérateur

 
Avatar de Antoun
 
Homme Antoine Dinimant
Consultant en Business Intelligence
Inscription : octobre 2006
Messages : 5 854
Détails du profil
Informations personnelles :
Nom : Homme Antoine Dinimant
Âge : 42
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : octobre 2006
Messages : 5 854
Points : 9 540
Points : 9 540
c'est un GROUP_CONCAT, auquel il faudra rajouter un remplacement de la dernière virgule par ET.
__________________
Antoun
Expert SQL, BO, Essbase

La bible d'Essbase est parue !
Antoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/11/2007, 20h01   #4
Invité régulier
 
Inscription : mars 2006
Messages : 43
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 43
Points : 8
Points : 8
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
batis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/11/2007, 20h37   #5
Rédacteur/Modérateur

 
Avatar de Antoun
 
Homme Antoine Dinimant
Consultant en Business Intelligence
Inscription : octobre 2006
Messages : 5 854
Détails du profil
Informations personnelles :
Nom : Homme Antoine Dinimant
Âge : 42
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : octobre 2006
Messages : 5 854
Points : 9 540
Points : 9 540
La position de la dernière virgule est donnée par
Code :
locate(',', reverse('Donald T., Garry S., James N.') )
La fin de la chaîne (après le ET) est donc :
Code :
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 :
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 :
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.
__________________
Antoun
Expert SQL, BO, Essbase

La bible d'Essbase est parue !
Antoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/11/2007, 21h59   #6
Invité régulier
 
Inscription : mars 2006
Messages : 43
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 43
Points : 8
Points : 8
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 :
Citation:
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....
batis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/11/2007, 21h40   #7
Invité régulier
 
Inscription : mars 2006
Messages : 43
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 43
Points : 8
Points : 8
J'ai trouvé, puisqu'il sagissait de créer un document XML, il suffisait d'ajouter ce qui est en rouge:
Citation:
// 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
batis est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h38.


 
 
 
 
Partenaires

Hébergement Web