Bonjour à tous,
Je souhaite récupérer sous forme d'une liste unique des données réparties dans 3 tables.
Table 1: contient des infos de base sur les utilisateurs
Code : Tout sélectionner
CREATE TABLE `users` (
`id` int(11) NOT NULL auto_increment,
`name` text NOT NULL,
`username` varchar(150) NOT NULL default '',
`email` varchar(100) NOT NULL default '',
PRIMARY KEY (`id`),
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=84 ;
Table 2: contient des champs de formulaire qui s'affichent pour que l'utilisateur puisse saisir des infos complémentaires. Il n'y a que les paramètres descriptifs de chaque champ car les valeurs sont saisies dans la troisième table.
Code : Tout sélectionner
CREATE TABLE `user_extended_fields` (
`id` int(11) NOT NULL auto_increment,
`titreChamp` text NOT NULL,
`typeChamp` text NOT NULL,
`published` tinyint(1) NOT NULL default '0',
`description` text NOT NULL,
PRIMARY KEY (`id`),
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=30 ;
Table 3: Permet de mapper l'id du champ et sa valeur pour l'utilisateur concerné
Code : Tout sélectionner
CREATE TABLE `user_extended_data` (
`id` int(11) NOT NULL auto_increment,
`field_id` int(11) NOT NULL default '0',
`user_id` int(11) NOT NULL default '0',
`fvalue` text NOT NULL,
PRIMARY KEY (`id`),
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=269 ;
Ma question: comment créer la requete sql qui va lister toutes les données utilisateurs: les données de la table 'users' + toutes les autres valeurs saisies par cet utilisateur dans chaque champ stocké dans `user_extended_fields`.
Un résultat de la requete ressemblerait à:
//données de base
'id' => '25'
'name'=> 'John'
'username' => 'FastMan'
'email' => '[email protected]'
//données complémentaires récupérées par le mappage
'adresse' => '4 rue de la soif'
'ville' => paris
'pays' => France
'hobbies' => 'vélo'
J'ai tenté ceci (pas d'erreur) mais ça ne fonctionne qu'en partie: j'arrive à récupérer seulement le 1er champ complémentaire (adresse), mais il me manque les autes:
SELECT u.id, u.name, u.username, u.email , ed.fvalue FROM users AS u, user_extended_data AS ed, user_extended_fields AS ef WHERE ef.id = ed.field_id AND ed.field_id IN (1,2,3,4)
1, 2, 3 et 4 sont les id des champs qui m'intéressent: adresse, ville, pays et hobbies, stockés dans la table 'user_extended_fields'.
adresse, ville, pays et hobbies correspondent aux titres des champs, stockés dans user_extended_fields.titreChamp
Merci à tous pour toute aide ou conseil car je me perds dans la complexité du raisonnement.
Bonjour à tous,
Je souhaite récupérer sous forme d'une liste unique des données réparties dans 3 tables.
Table 1: contient des infos de base sur les utilisateurs
[code]
CREATE TABLE `users` (
`id` int(11) NOT NULL auto_increment,
`name` text NOT NULL,
`username` varchar(150) NOT NULL default '',
`email` varchar(100) NOT NULL default '',
PRIMARY KEY (`id`),
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=84 ;
[/code]
Table 2: contient des champs de formulaire qui s'affichent pour que l'utilisateur puisse saisir des infos complémentaires. Il n'y a que les paramètres descriptifs de chaque champ car les valeurs sont saisies dans la troisième table.
[code]
CREATE TABLE `user_extended_fields` (
`id` int(11) NOT NULL auto_increment,
`titreChamp` text NOT NULL,
`typeChamp` text NOT NULL,
`published` tinyint(1) NOT NULL default '0',
`description` text NOT NULL,
PRIMARY KEY (`id`),
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=30 ;
[/code]
Table 3: Permet de mapper l'id du champ et sa valeur pour l'utilisateur concerné
[code]
CREATE TABLE `user_extended_data` (
`id` int(11) NOT NULL auto_increment,
`field_id` int(11) NOT NULL default '0',
`user_id` int(11) NOT NULL default '0',
`fvalue` text NOT NULL,
PRIMARY KEY (`id`),
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=269 ;
[/code]
Ma question: comment créer la requete sql qui va lister toutes les données utilisateurs: les données de la table 'users' + toutes les autres valeurs saisies par cet utilisateur dans chaque champ stocké dans `user_extended_fields`.
Un résultat de la requete ressemblerait à:
[php]
//données de base
'id' => '25'
'name'=> 'John'
'username' => 'FastMan'
'email' => '
[email protected]'
//données complémentaires récupérées par le mappage
'adresse' => '4 rue de la soif'
'ville' => paris
'pays' => France
'hobbies' => 'vélo'
[/php]
J'ai tenté ceci (pas d'erreur) mais ça ne fonctionne qu'en partie: j'arrive à récupérer seulement le 1er champ complémentaire (adresse), mais il me manque les autes:
[php]
SELECT u.id, u.name, u.username, u.email , ed.fvalue FROM users AS u, user_extended_data AS ed, user_extended_fields AS ef WHERE ef.id = ed.field_id AND ed.field_id IN (1,2,3,4)
[/php]
1, 2, 3 et 4 sont les id des champs qui m'intéressent: adresse, ville, pays et hobbies, stockés dans la table 'user_extended_fields'.
adresse, ville, pays et hobbies correspondent aux titres des champs, stockés dans user_extended_fields.titreChamp
Merci à tous pour toute aide ou conseil car je me perds dans la complexité du raisonnement.