【问题标题】:Get data from WordPress MySQL user_meta table and my custom table从 WordPress MySQL user_meta 表和我的自定义表中获取数据
【发布时间】:2019-02-24 16:57:12
【问题描述】:

我有一个自定义表格“订单”,我在其中保存订单数据。

| id | user_id | product

通过这种方式,我从中获取数据。

$orders = $wpdb->get_results( 
   "
   SELECT * 
   FROM sbgf_pl_orders
   ORDER BY ID DESC
   LIMIT 500
");

foreach ( $orders as $order ){ 
  echo $order->id;
}

我想将我的请求与 user_meta 表相关联,这样我就可以从那些个人资料具有特定交付方式的用户那里获得订单,例如 suer meta "shippment_method"。

我试过了,但是这个请求使我的网站超载

$orders = $wpdb->get_results( 
   "
   SELECT * 
   FROM sbgf_pl_orders, sbgf_user_meta
   WHERE sbgf_user_meta.shipping_method = '1' AND sbgf_user_meta.user_id=sbgf_user_meta.user_id
   ORDER BY ID DESC
   LIMIT 500
");

foreach ( $orders as $order ){ 
  echo $order->id;
}

【问题讨论】:

  • 不应该把AND sbgf_user_meta.user_id=sbgf_user_meta.user_id写成AND sbgf_user_meta.user_id=sbgf_pl_orders.user_id吗?

标签: php mysql sql wordpress


【解决方案1】:

您没有正确加入表格:

AND sbgf_user_meta.user_id=sbgf_user_meta.user_id

此条件始终为真,并且您的加入会导致用户和订单之间的笛卡尔积具有运输方式1

此外,您应该始终使用显式连接而不是老式的隐式连接,如 this SO answer 中的示例所述。

最后,在查询中给表加上别名也是一个好习惯,并在列前加上这些别名。这使得查询更易于阅读和维护,并避免列名冲突时产生歧义。

您的查询应该如下所示:

SELECT * 
FROM sbgf_pl_orders ord
INNER JOIN sbgf_user_meta usr ON usr.shipping_method = 1 AND usr.user_id = ord.user_id
ORDER BY ord.ID DESC
LIMIT 500

【讨论】:

  • 不幸返回空数组:(
【解决方案2】:

@GMB 谢谢你的想法。我猜怎么做对了

$orders = $wpdb->get_results( 
            "
            SELECT *
            FROM sbgf_pl_orders ord
            INNER JOIN sbgf_usermeta m1 ON (ord.user_id = m1.user_id AND m1.meta_value = '1'
            ORDER BY ord.ID DESC
            LIMIT 500
            "
          );

【讨论】:

  • 嘿@usr3514052,我认为你应该赞成/接受我的回答......它实际上给了你解决方案,你只是改变了一个条件(那不是你原来帖子的一部分,所以我猜不出来)。
猜你喜欢
  • 1970-01-01
  • 2021-04-24
  • 1970-01-01
  • 1970-01-01
  • 2016-03-03
  • 1970-01-01
  • 2013-09-02
  • 1970-01-01
  • 2015-10-10
相关资源
最近更新 更多