帮助MySQL查询

时间:2010-12-14 22:13:11

标签: 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`)
);

3 个答案:

答案 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)

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

答案 2 :(得分:0)

您的架构似乎无法准确维护所需的信息。首先在User表中,您将名称作为1属性,因此必须通过其他方式分割名字和姓氏。其次,不清楚公司名称或网站信息的存储位置。请提供从所需输出到数据库表中属性的逻辑映射。