2010-12-14 30 views
2

J'ai la requête suivante:Aide avec une requête MySQL

SELECT u.uid, pf.title, pv.value FROM users AS u INNER JOIN 
profile_values AS pv ON pv.uid = u.uid 
INNER JOIN 
profile_fields AS pf ON pf.fid = pv.fid 
ORDER BY u.uid 

qui se traduit par:

uid  title value 
1 First name Jared 
1 Last name Boo 
1 Organization Acme 
1 Website http://acme.com 
1 Country Canada 
6 First name Nathan 
6 Last name Foo 

Je tente d'utiliser ce résultat pour créer un autre jeu de résultats qui ressemble à ceci:

uid First name Last name Organization Website Country 
1 Jared  Boo  Acme   http... Canada 
6 Nathan  Foo 

Est-ce que je vais correctement à ce sujet?

Merci à l'avance

EDIT

Tableaux:

CREATE TABLE `users` (
    `uid` int(10) unsigned NOT NULL auto_increment, 
    `name` varchar(60) NOT NULL default '', 
    `pass` varchar(32) NOT NULL default '', 
    `mail` varchar(64) default '', 
    `created` int(11) NOT NULL default '0', 
    `access` int(11) NOT NULL default '0', 
    PRIMARY KEY (`uid`), 
    UNIQUE KEY `name` (`name`), 
    KEY `access` (`access`), 
    KEY `created` (`created`), 
    KEY `mail` (`mail`) 
); 

CREATE TABLE `profile_fields` (
    `fid` int(11) NOT NULL auto_increment, 
    `title` varchar(255) default NULL, 
    `name` varchar(128) NOT NULL default '', 
    `explanation` text, 
    `category` varchar(255) default NULL, 
    PRIMARY KEY (`fid`), 
    UNIQUE KEY `name` (`name`), 
    KEY `category` (`category`) 
); 

CREATE TABLE `profile_values` (
    `fid` int(10) unsigned NOT NULL default '0', 
    `uid` int(10) unsigned NOT NULL default '0', 
    `value` text, 
    PRIMARY KEY (`uid`,`fid`), 
    KEY `fid` (`fid`) 
); 
+0

Que se passe-t-il lorsqu'un utilisateur a plusieurs prénoms? –

+0

En outre, prévoyez-vous de générer dynamiquement les en-têtes de colonne ou définir dans votre requête les champs qu'il doit extraire? –

+0

Un utilisateur n'aura pas plus d'un des champs. Il m'a semblé logique d'utiliser la valeur de 'title' comme en-tête de colonne –

Répondre

0
SELECT u.uid, pf.title, pv.value 
FROM users AS u, profile_values AS pv, profile_fields AS pf 
WHERE pv.id = u.uid, pf.fid = pv.fid 
ORDER BY u.uid 

est quelque chose comme ce que vous cherchez? À quoi ressemblent les tableaux en termes de clés étrangères? Vous voudrez peut-être jeter un DISTINCT juste après SELECT.

0

Tout est correct. On ne sait pas d'où proviennent les champs organization, Website, Country (car nous ne connaissons pas la structure de votre base de données), mais si country était une colonne de profile_fields, vous ajouteriez simplement SELECT ..., pf.country ... pour obtenir les données désirées.

0

Il semble que votre schéma ne gère pas correctement les informations requises. Tout d'abord dans le tableau User vous avez le nom comme attribut 1, donc le partage du prénom et du nom doit être fait par d'autres moyens. Deuxièmement, il n'est pas clair où le nom de l'entreprise ou les informations du site Web sont stockées. Veuillez fournir un mappage logique de la sortie souhaitée aux attributs dans les tables de base de données. Que se passe-t-il lorsqu'un utilisateur a plusieurs prénoms?