mysql新手,特来求教!问题是这样的,我有三张表user:用户数据表
user_ext:用户扩展信息表
user_field:用户扩展字段表必要结构如下:
user
    id,                用户编号,主键
    username           用户名user_ext
    id,                扩展编号,主键
    user_id,           用户编号
    field_id,          字段编号
    field_value        字段的值user_field
    id,                字段编号,主键。不考录重复等问题
    field_name,        字段英文名
    field_text,        字段中文名
    com_id             所属公司编号
在说明下基础数据。用户表里就一个用户,叫张三,id为1他有两个扩展字段,数据库内容如下:
id             user_id          field_id          field_value
1              1                1                 1
2              1                2                 0扩展字段是用户自己添加的,这里先假设用户有两个扩展字段,数据如下:
id    field_name     field_text com_id
1     is_menber      是会员       1
2     gender         性别         1现在想要得到这样一个结果
user_id     username        is_member        gender 
1           张三               1                0新手分少,一点小分意思意思,请各位指教。    

解决方案 »

  1.   

    SET @asql='';
    SELECT b.*,@asql:=CONCAT(@asql,'max(if(b.id=',b.id,',a.`field_value` ,0)) as ',field_name,',')
     FROM tf a LEFT JOIN tf1 b ON a.`field_id`=b.`id`;
     SET @asql=CONCAT('select a.user_id,',LEFT(@asql,LENGTH(@asql)-1),
     '  from tf a LEFT JOIN tf1 b ON a.`field_id`=b.`id` group by a.user_id');
     SELECT @asql;
     PREPARE stml FROM @asql;
     EXECUTE stml; 
     
      

  2.   

    类似这种一般是在程序中先生成好SQL语句然后进行查询,通过MYSQL中SQL语句拼接效率比较差。
      

  3.   

    不行啊。
    最后一列老是CONCAT(@asql,'max(if(b.id=',b.id,',a.`field_value` ,0)) as ',field_name,',')
    不显示出来。
      

  4.   

    1楼代码是测试通过的,提示什么
    贴建表及插入记录的SQL,及要求结果出来看看