求指点数据库行转列

浏览:921 发布日期:2016/05/27 分类:求助交流
模仿wordpress的数据库 做了一个会员系统
为了让会员的字段扩展灵活,用user表存放会员的基本信息,在userexp表用key-value的形式存放会员的扩展信息,

数据表的内容如下

表user +-----+-------------+---------+----------------------------------+
| id  | user_name   | role_id | user_pass                        |
+-----+-------------+---------+----------------------------------+
| 238 | wuli杨趙    |       1 | 7E7CE4CBB49BD3596B9AF3D4A233A9A3 |
| 240 | yangxiao    |       2 | e10adc3949ba59abbe56e057f20f883e |
| 241 | qingshu     |      11 | 847EB1D60DCC86A68E2FA4809FCA8159 |
| 245 | wuli        |       2 | e10adc3949ba59abbe56e057f20f883e |
| 247 | ssss        |       2 | 912ec803b2ce49e4a541068d495ab570 |
| 248 | quyang      |       2 | e10adc3949ba59abbe56e057f20f883e |
| 249 | xiaoyang    |       2 | 2cfd4560539f887a5e420412b370b361 |
| 250 | ceshi       |      35 | 4297f44b13955235245b2497399d7a93 |
+-----+-------------+---------+----------------------------------+
表userexp +---------+--------------------+------------------------------+
| user_id | exp_key            | exp_value                    |
+---------+--------------------+------------------------------+
|     240 | wd_address_add     | XX街                         |
|     240 | wd_address_area    | 120300                       |
|     240 | wd_annualturnover  | 1                            |
|     240 | wd_birthday        | 2016-5-19                    |
|     240 | wd_businesslicense | img/201603/56f64f6ee8810.jpg |
|     240 | wd_businessscope   | 互联网                       |
|     240 | wd_companyname     | 一家网络公司                 |
|     240 | wd_companytype     | 6                            |
|     240 | wd_corporate       | 靖哥哥                       |
|     240 | wd_employeesnumber | 1                            |
|     240 | wd_established     | 2016-2                       |
|     240 | wd_fax             | 1234567                      |
|     240 | wd_hotline         | 40000000000                  |
|     240 | wd_isoem           | 1                            |
|     240 | wd_location        | 120.755676,30.7558,11        |
|     240 | wd_mainbusiness    | 1                            |
|     240 | wd_mobile          | 13112341324                  |
|     240 | wd_nickname        | 一家                         |
|     240 | wd_number          | 123456                       |
|     240 | wd_qq              | 7892640                      |
|     240 | wd_regcapital      | 1250                         |
|     240 | wd_sex             | 1                            |
|     240 | wd_switchboard     | 1234567                      |
|     240 | wd_tel             | 1234567                      |
|     240 | wd_weixin          | weixin                       |
|     240 | wd_zipcode         | 314200                       |
+---------+--------------------+------------------------------+
经过学习的实践,已经实现了会员的添加修改和删除和读取单条内容。
我读取单条信息是先读出user表,再根据User表的id 去 读取userexp表,然后再用一个循环把读出的数据整理合并到user表的记录集里面
但现在问题来了,怎么实现读取多条会员信息,如果采用上面的方法会读取很多次数据库,肯定效率会很差。

我希望取出来的数据是这样的 +-----+-------------+---------+----------------+---------------+----+
| id  | user_name   | role_id | wd_address_add |wd_address_area| ...|
+-----+-------------+---------+----------------+---------------+----+
| 238 | wuli杨趙    |       1 |                |               |    |
| 240 | yangxiao    |       2 | XX街           |120300         |    |
| 241 | qingshu     |      11 |                |               |    |
| 245 | wuli        |       2 |                |               |    |
| 247 | ssss        |       2 |                |               |    |
| 248 | quyang      |       2 |                |               |    |
| 249 | xiaoyang    |       2 |                |               |    |
| 250 | ceshi       |      35 |                |               |    |
+-----+-------------+---------+----------------+---------------+----+
还有,如果我想按扩展表的字段做为查询条件,又该怎么办。
比如,我要查所有 wd_companytype = 6 的会员,并读出这些会员的所有数据,又该怎么办呢?
怎么才能高效率的实现呢?

百度过 也问过朋友,他们说用行转列的方法,可是基础不太好,感觉意思懂了,但不知道怎么实现,怎么用我的thinkPHP 代码去实现他, 求大神们指点一二,感激不尽!
最佳答案
评论( 相关
后面还有条评论,点击查看>>