我有一个自定义表“订单”,我在其中保存订单数据。
| 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 表相关联,这样我就可以从那些配置文件具有特定交付方式作为元“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
此条件将始终为真,并且您的加入会导致用户和具有送货方式 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
关于php - 从 WordPress MySQL user_meta 表和我的自定义表中获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54854257/