mysql - WordPress:加入用户、元和外部表问题

标签 mysql wordpress

我知道这是微不足道的,但由于某种原因我遇到了麻烦。我有一个包含用户 ID 的表,我试图连接 wp_users 表和 wp_usermeta 表来获取第一个、最后一个和电子邮件地址。

我可以将 wp_usermeta 表与第一个表连接起来,毫无问题地获取名字和姓氏。我遇到的问题是加入 wp_users 表以获取电子邮件地址。

$query = $wpdb->get_results
(" 
    SELECT id, u_id, u.meta_value as first_name, u2.meta_value as     last_name, x.ID as user_email
        FROM $table_name s 
        INNER JOIN wp_usermeta u ON s.u_id = u.user_id 
        INNER JOIN wp_usermeta u2 ON s.u_id = u2.user_id 
        INNER JOIN wp_users x ON s.u_id = x.ID
        WHERE
        u.meta_key = 'first_name' AND u2.meta_key = 'last_name' AND x.ID = 'user_email' AND
         id like '%".$search."%'    
");

最佳答案

修改后的代码如下:

$query = $wpdb->get_results
("
    SELECT id, u_id, u.meta_value as first_name, u2.meta_value as last_name, x.user_email
    FROM $table_name s 
    INNER JOIN wp_users x ON s.u_id = x.ID
    INNER JOIN wp_usermeta u ON s.u_id = u.user_id AND u.meta_key = 'first_name'
    INNER JOIN wp_usermeta u2 ON s.u_id = u2.user_id AND u2.meta_key = 'last_name'
    WHERE id like '%".$search."%'
");

我已更改 usermeta 连接以包含这两个条件(用户 ID 和元键值)。但是,如果用户没有设置名字或姓氏,此查询将不会返回该用户,因此您可以考虑将用户的 INNER JOIN 更改为 LEFT JOIN -元列。

而且,主要问题是您错误地使用了 Users 表。该表与元表不同,它具有用户电子邮件、用户名和其他内容的实际列,因此您只需从中选择您需要的内容,因此您只有x.user_email

另外,我不确定 WHERE 搜索条件,因为 ID 列通常是数字,所以你最好使用比较,而不是 like。如果您的 $search 是一个数字,并且只有一个 ID 匹配,请将 WHERE 替换为“id = $search”。

关于mysql - WordPress:加入用户、元和外部表问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45909029/

相关文章:

PHP 登录页面无法正常工作

php - 使用 php jquery ajax 从数据库获取仪表板计数

php - 图片已上传但未存储

php - 获取表前缀

mysql - 在 Ec2 实例上安装 Wordpress,数据库位于 RDS 实例上

wordpress - 来自子域的字体已被跨域资源共享策略阻止

Ubuntu 上的 Mysql : ERROR 1045 (28000)

mysql - Symfony Doctrine 分组依据

wordpress - paginate_links() 输出 "paged="进行链接,而不是 "page="

php - 以编程方式添加/更新 woocommerce 产品的 SEO 元关键字