php - 对mySql命令获取meta信息?

标签 php mysql sql

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, '") `', 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;

关于php - 对mySql命令获取meta信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6602443/

相关文章:

database - 这可以在一个查询中完成吗?

sql - 用两个分隔符将字符串拆分为两列

php - 任何用于 ruby​​ 和 PHP 的 html/css 解析库?

php - Magento - 我需要一个关于如何创建自定义联系表单的 "Good"教程

mysql - 如何解决mysql_error()?

sql - 查找特定记录的值(value)相对于整个结果的百分比

mysql - 建立mysql表两列之间的关系

php - TinyMCE 和 MySQL PHP 输出

php - 如何在错误 1062 上处理超过 1 个唯一索引?

PHP MySQL 选择多个条件