mysql - 将多行合并为一行

标签 mysql rows

我有以下查询,但这个查询返回 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 行:

用户 1 值 69 用户 73 值 75

我该如何解决这个问题?

数据所在的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'

关于mysql - 将多行合并为一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14895842/

相关文章:

jQuery相当于隐藏连续元素

javascript - 日期选择器仅适用于第一行

excel vba根据我的表格大小自动计算公式

mysql - 根据两列中的日期范围重复行

python,将 pandas 数据帧转储到 SQL 数据库中

PHP MySQL(i) 分页/分页帮助

php - 如何在PHP中分离从表中提取的数据

ios - 按日期排序的 Xcode UITableView 部分和行(来自 mutableArray)

mysql - Rails 测试数据库缺少主键

php - 更新 MySQL 字段时更改的日期