加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 正确的mySql命令获取元信息?

发布时间:2020-12-13 22:31:12 所属栏目:PHP教程 来源:网络整理
导读:WordPress是一个很好的Web应用程序示例,它使用表格来显示用户信息,然后是用户数据的元查找表.唯一的问题是,我知道获取用户列表的元信息的完整列表的唯一方法是“手动”构建sql语句 – 硬编码或借助 PHP. 用户表看起来像这样: wp_users表 ID|user_login|user
WordPress是一个很好的Web应用程序示例,它使用表格来显示用户信息,然后是用户数据的元查找表.唯一的问题是,我知道获取用户列表的元信息的完整列表的唯一方法是“手动”构建sql语句 – 硬编码或借助 PHP.

用户表看起来像这样:

wp_users表

ID|user_login|user_email|user_pass|date_registered
==================================================
 1|   me     |me@me1.com|f239j283r|   2011-01-01

wp_usermeta表

umeta_id|user_id|meta_key|meta_value
====================================
   1    |   1   | phone  | 123-4567
   1    |   1   | fname  | john
   1    |   1   | lname  | doe

我知道我可以做这样的事情(手动或用PHP)来实现我想要的结果:

select *
from wp_users
left join wp_usermeta as phone on (ID = user_id) AND (meta_key = phone)
left join wp_usermeta as fname on (ID = user_id) AND (meta_key = fname)
left join wp_usermeta as lname on (ID = user_id) AND (meta_key = lname)

产生这样的东西:

ID|user_login|user_email|user_pass|date_registered|phone   |fname|lname
=================================================================+++===
 1|   me     |me@me1.com|f239j283r|   2011-01-01  |123-4567|john |doe

我知道mySql也有GROUP_CONCAT的东西,这就是为什么我觉得有更好的方法.这看起来像这样:

select *,group_concat(meta_value) as all_meta
from wp_users
left join wp_usermeta on ID = user_id
group by wp_users.ID

那么是否有一种方法可以获得与第一个sql语句类似的结果,并使用更像第二个的动态sql语句?

编辑

Doug提出了一个有趣的解决方案,可能使用了information_schema.我无法让它工作,所以我已经为任何想要测试SQL的人发布了两个表的转储:) http://pastebin.com/w0jkxnws

解决方法

这是你在找什么?它仍然是3个陈述,但是,与我之前的相反声明相反,应该没有太多的准备费用.

set group_concat_max_len = 2048;
SELECT CONCAT('SELECT u.id,u.user_login,',GROUP_CONCAT(concat('
    (SELECT meta_value FROM wp_usermeta WHERE user_id = u.id AND meta_key = "',um.meta_key,'") `','`') SEPARATOR ","),'
    FROM wp_users u ') FROM (SELECT DISTINCT meta_key FROM wp_usermeta) um INTO @sql;

PREPARE stmt1 FROM @sql;
EXECUTE stmt1;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读