2010-12-14 116 views
2

我有以下查询:帮助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 

导致:

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 

我试图用这个结果来创建另一个结果集,它看起来是这样的:

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

我正确地处理这个问题吗?

在此先感谢

编辑

表:

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

当一个用户有多个名字时会发生什么? – 2010-12-14 22:17:50

+0

另外,你打算动态生成列标题,还是在查询中定义它应该提取哪些字段? – 2010-12-14 22:18:54

+0

用户不会有任何一个字段。对于我来说,使用“标题”的值作为列标题似乎很合理 – 2010-12-14 22:22:13

回答

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 

是这样的你找什么呢?外键是什么样的表?您可能想要在SELECT之后立即丢弃DISTINCT

0

这都是正确的。目前尚不清楚组织,网站,国家/地区字段应该来自哪里(因为我们不知道您的数据库结构),但是,例如,如果countryprofile_fields的列,则只需添加SELECT ..., pf.country ...即可获取所需的数据。

0

看来你的模式不能准确地维护所需的信息。首先在User表中,您将名称设置为1属性,因此必须通过其他方式来分隔名和姓。其次,不清楚公司名称或网站信息的存储位置。请提供从所需输出到数据库表中属性的逻辑映射。