我有以下查询:
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 :(得分: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
这样的东西是你想要的吗?这些表在外键方面看起来像什么?您可能希望在DISTINCT
之后立即抛出SELECT
。
答案 1 :(得分:0)
这都是正确的。目前尚不清楚组织,网站,国家/地区字段应该来自哪里(因为我们不知道您的数据库结构),但是,例如,如果country
是profile_fields
的列,您只需添加SELECT ..., pf.country ...
以获取所需数据。
答案 2 :(得分:0)
您的架构似乎无法准确维护所需的信息。首先在User
表中,您将名称作为1属性,因此必须通过其他方式分割名字和姓氏。其次,不清楚公司名称或网站信息的存储位置。请提供从所需输出到数据库表中属性的逻辑映射。