Php 在MySql中获取两列并将结果相乘
好的,我有以下几点:Php 在MySql中获取两列并将结果相乘,php,mysql,wordpress,Php,Mysql,Wordpress,好的,我有以下几点: user id meta 2 _qty 3 2 Weight 20 1 _qty 1 1 weight 30 我需要抓取用户id列,然后将数量乘以用户id 2=60和用户id=130给我的权重。。。。。。 我尝试了以下方法,但没有效果: $myrows = $wpdb->get_results( "SELECT meta_value, SUM(_qty*weigh
user id meta
2 _qty 3
2 Weight 20
1 _qty 1
1 weight 30
我需要抓取用户id列,然后将数量乘以用户id 2=60和用户id=130给我的权重。。。。。。
我尝试了以下方法,但没有效果:
$myrows = $wpdb->get_results( "SELECT meta_value, SUM(_qty*weight) AS product_id FROM {$wpdb->prefix}woocommerce_order_itemmeta GROUP BY ($query_select_order_items)" );
其中$query\u select\u order\u items是用户id。
我该怎么办
我当前运行的实际php:
/**
* Returns all the orders made by the user
*
* @param int $user_id
* @param string $status (completed|processing|canceled|on-hold etc)
* @return array of order ids
*/
function fused_get_all_user_orders($user_id,$status='completed'){
if(!$user_id)
return false;
$orders=array();//order ids
$args = array(
'numberposts' => -1,
'meta_key' => '_customer_user',
'meta_value' => $user_id,
'post_type' => 'shop_order',
'post_status' => 'publish',
/* 'tax_query'=>array(
array(
'taxonomy' =>'shop_order_status',
'field' => 'slug',
'terms' =>$status
)
) */
);
$posts=get_posts($args);
//get the post ids as order ids
$orders=wp_list_pluck( $posts, 'ID' );
return $orders;
}
function fused_get_all_products_ordered_by_user($user_id=false){
$orders=fused_get_all_user_orders($user_id);
if(empty($orders))
return false;
$order_list='('.join(',', $orders).')';//let us make a list for query
//so we have all the orders made by this user which was successfull
//we need to find the products in these order and make sure they are downloadable
// find all products in these order
global $wpdb;
$query_select_order_items="SELECT order_item_id as id FROM {$wpdb->prefix}woocommerce_order_items WHERE order_id IN {$order_list}";
$query_select_product_ids="SELECT meta_value as product_id FROM {$wpdb->prefix}woocommerce_order_itemmeta WHERE meta_key=%s AND order_item_id IN ($query_select_order_items)";
$products=$wpdb->get_col($wpdb->prepare($query_select_product_ids,'weight'));
$qty = $wpdb->get_col($wpdb->prepare($query_select_product_ids,'_qty'));
return $products;
}
当前,末端的$products返回一个重量列表,或者如果我将其设置为_qty,它将返回一个订购数量列表。。。
草莓更新答案:
"SELECT order_item_id, weight * quantity total FROM (
SELECT order_item_id,
MAX(CASE WHEN meta_key = '_qty' THEN meta_value ELSE 0 END) quantity ,
MAX(CASE WHEN meta_key = 'weight' THEN meta_value ELSE 0 END) weight
FROM wp_woocommerce_order_itemmeta GROUP BY order_item_id)
WHERE order_item_id IN ($query_select_order_items) x;"
您可以在此中尝试它您可以使用以下查询:
select tbl1.val*tbl2.val
from mytbl as tbl1,mytbl as tbl2
where tbl1.user_id=tbl2.user_id
and tbl2.meta='Weight'
and tbl1.meta='_qty'
我也准备好了。这里有一个方法
DROP TABLE IF EXISTS my_table;
CREATE TABLE my_table
(entity INT NOT NULL
,attribute VARCHAR(12) NOT NULL
,value INT NOT NULL
,PRIMARY KEY(entity,attribute)
);
INSERT INTO my_table VALUES
(2,'quantity',3),
(2,'weight',20),
(1,'quantity',1),
(1,'weight',30);
SELECT entity, weight * quantity total
FROM
( SELECT entity
, MAX(CASE WHEN attribute = 'quantity' THEN value END) quantity
, MAX(CASE WHEN attribute = 'weight' THEN value END) weight
FROM my_table
GROUP
BY entity
) x;
+--------+-------+
| entity | total |
+--------+-------+
| 1 | 30 |
| 2 | 60 |
+--------+-------+
。。。甚至只是
SELECT entity
, ROUND(EXP(SUM(LOG(value)))) total
FROM my_table
GROUP
BY entity;
+--------+-------+
| entity | total |
+--------+-------+
| 1 | 30 |
| 2 | 60 |
+--------+-------+
将第一个查询调整到您的小提琴可能如下所示
SELECT order_item_id, weight * quantity total
FROM
( SELECT order_item_id
, MAX(CASE WHEN meta_key = '_qty' THEN meta_value ELSE 0 END) quantity
, MAX(CASE WHEN meta_key = 'weight' THEN meta_value ELSE 0 END) weight
FROM wp_woocommerce_order_itemmeta
GROUP
BY order_item_id
) x;
SELECT order_item_id
, ROUND(EXP(SUM(LOG(meta_value)))) total
FROM wp_woocommerce_order_itemmeta
WHERE meta_key IN('_qty','weight')
GROUP
BY order_item_id;
…第二个可能是这样的
SELECT order_item_id, weight * quantity total
FROM
( SELECT order_item_id
, MAX(CASE WHEN meta_key = '_qty' THEN meta_value ELSE 0 END) quantity
, MAX(CASE WHEN meta_key = 'weight' THEN meta_value ELSE 0 END) weight
FROM wp_woocommerce_order_itemmeta
GROUP
BY order_item_id
) x;
SELECT order_item_id
, ROUND(EXP(SUM(LOG(meta_value)))) total
FROM wp_woocommerce_order_itemmeta
WHERE meta_key IN('_qty','weight')
GROUP
BY order_item_id;
。。。并根据您的最新需求调整第一个
SELECT i.order_item_id, weight * quantity total
FROM
( SELECT order_item_id
, MAX(CASE WHEN meta_key = '_qty' THEN meta_value ELSE 0 END) quantity
, MAX(CASE WHEN meta_key = 'weight' THEN meta_value ELSE 0 END) weight
FROM wp_woocommerce_order_itemmeta
GROUP
BY order_item_id
) x
JOIN wp_woocommerce_order_items i
ON i.order_item_id = x.order_item_id
WHERE i.order_id IN(647,649,650);
请尝试此查询选择元值、\u数量*表中的权重\u名称分组依据。$query\u选择\u订单\u项目是否确定每个用户只有一个\u数量和权重?我将只有一个\u数量是,但可能还有更多权重。。。我会用我正在运行的实际代码片段更新我的问题事实上这是错误的每个用户id可能会有不同的数量和权重…好的,我不知道我需要在这里替换什么,所以它适用于我的代码。。我在哪里输入$query\u select\u订单_items@vimes1984我不明白你的评论。您可以从fiddle中看到查询返回的内容。我认为您只需要将表名从t更改为yourTableName,然后在php中获取结果,以获取用户id和计算的字段值。是吗?@vimes1984哪张桌子是你想要做手术的桌子?那位好心的先生是天才谢谢。。。。。你知道我该如何把它结合起来吗:从{$wpdb->prefix}woocommerce\u order\u items中选择order\u item\u id作为id,其中{$order\u list}其中order_列表是我需要ID的实际订单…X的结尾是什么?好的,我在上面试过了,有点道理,我想过滤整个内容,只返回与第一个sql查询匹配的结果。。。从{$wpdb->prefix}woocmerce\u order\u items中选择order\u item\u id作为id,{$order\u list}中的order\u id是一个逗号指定的订单列表…好的,我想这是可行的:从SELECT order\u item\u id中选择order\u item\u id,weight*quantity total,当meta\u key=''u quantity'然后meta\u value,否则0 END quantity,最大情况下,当meta_key='weight'然后meta_value ELSE 0根据订单(项目)id x从wp_订单(项目)meta组结束权重,其中订单(项目)id在$query中(选择)订单(项目);;为什么?我想不出X是什么你有什么可以解释的吗