合并多行到一个
问题描述:
我有以下查询,但是这一次返回3行,我想一个行;-)合并多行到一个
SELECT
b_firstname ,value
FROM
cscart_user_profiles
RIGHT JOIN profile_fields_data ON profile_fields_data.object_id = user_profiles.profile_id
WHERE
user_profiles.b_title NOT LIKE ''
AND user_profiles.profile_id = '4252'
AND (
profile_fields_data.field_id ='69'
OR
profile_fields_data.field_id ='73'
OR
profile_fields_data.field_id ='75'
)
...但是这将返回3行:
user1 value
user1 value
user1 value
我想1行:
USER1 value69 user73 value75
我怎样才能解决这个问题?
下面的表2的数据在哪里
CREATE TABLE IF NOT EXISTS `cscart_user_profiles` (
`profile_id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`user_id` mediumint(8) unsigned NOT NULL DEFAULT '0',
`profile_type` char(1) NOT NULL DEFAULT 'P',
`b_title` varchar(32) NOT NULL DEFAULT '',
`b_firstname` varchar(128) NOT NULL DEFAULT '',
`b_lastname` varchar(128) NOT NULL DEFAULT '',
`b_address` varchar(64) NOT NULL DEFAULT '',
`b_address_2` varchar(64) NOT NULL DEFAULT '',
`b_city` varchar(64) NOT NULL DEFAULT '',
`b_county` varchar(32) NOT NULL DEFAULT '',
`b_state` varchar(32) NOT NULL DEFAULT '',
......
PRIMARY KEY (`profile_id`),
KEY `uid_p` (`user_id`,`profile_type`),
KEY `profile_type` (`profile_type`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=0 ;
CREATE TABLE IF NOT EXISTS `cscart_profile_fields_data` (
`object_id` mediumint(8) unsigned NOT NULL DEFAULT '0',
`object_type` char(1) NOT NULL DEFAULT 'U',
`field_id` mediumint(8) unsigned NOT NULL DEFAULT '0',
`value` varchar(255) NOT NULL DEFAULT '0',
PRIMARY KEY (`object_id`,`object_type`,`field_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
答
您可以加入到profile_fields_data表3单独次获得单排3个独立的值。
SELECT b_firstname,
pfd69.value as value69,
pfd73.value as value73,
pfd75.value as value75
FROM cscart_user_profiles AS up
RIGHT JOIN cscart_profile_fields_data AS pfd69
ON pfd69.object_id = up.profile_id
AND pfd69.field_id ='69'
RIGHT JOIN cscart_profile_fields_data AS pfd73
ON pfd73.object_id = up.profile_id
AND pfd73.field_id ='73'
RIGHT JOIN cscart_profile_fields_data AS pfd75
ON pfd75.object_id = up.profile_id
AND pfd75.field_id ='75'
WHERE up.b_title NOT LIKE ''
AND up.profile_id = '4252'
答
你可以使用嵌套查询?
SELECT * FROM (
SELECT User1, Value69 FROM table) AS T1
INNER JOIN (
SELECT User2, Value75 FROM table) AS T2 ON T1.Somevalue = T2.Somevalue
等
但没有看到您的架构很难写一个有用的例子
+0
你需要我什么? – Bas 2013-02-15 14:02:08
考虑发布您的数据库架构和示例数据。 – Minesh 2013-02-15 13:30:08
@minesh,你呢? – Bas 2013-02-15 14:11:37