获取两个数组的差 php,php-获取2个数组之间的差

我有2个搜索查询-一个将显示最近7天的内容.另一个将显示2周前的内容.

两者都很好.但是我想从第一个查询中获取结果,并从第二个查询中获取差异.然后显示带有差异的第一个查询.

$result_account = $db->query("

SELECT nid

, COUNT(cat) AS qty

, dte

, descript

, cat

, name

, user

FROM client_note AS cn

JOIN client_note_tag_items AS cnti

ON cnti.note_id = cn.nid

JOIN client_note_tags AS cnt

ON cnt.tag_id = cnti.tag_id

WHERE dte >= DATE_SUB(CURDATE(), INTERVAL 7 DAY)

AND name NOT LIKE 'Resolution%'

GROUP

BY cat

ORDER

BY qty DESC

LIMIT 5

");

if($count_account = $result_account->num_rows) {

while($row = $result_account->fetch_object()){

echo "

";

echo "

".$row->cat."

".$row->qty."

";

echo "

";

}

}

$result_previous = $db->query("SELECT nid, COUNT(cat) AS qty, dte, descript, cat, name, user FROM client_note AS cn JOIN client_note_tag_items AS cnti ON cnti.note_id = cn.nid JOIN client_note_tags AS cnt ON cnt.tag_id = cnti.tag_id WHERE (dte BETWEEN DATE_SUB(CURDATE(), INTERVAL 21 DAY) AND DATE_SUB(CURDATE(), INTERVAL 14 DAY)) AND name NOT LIKE 'Resolution%' GROUP BY cat ORDER BY qty DESC LIMIT 5");

if($count_previous = $result_previous->num_rows) {

while($row_p = $result_previous->fetch_object()){

echo "

";

echo "

".$row_p->cat."

".$row_p->qty."

";

echo "

";

}

}

第一个查询将导致:

Category - Qty

Baseball - 45

Football - 33

Soccer - 21

Hockey - 7

Basketball - 3

第二个查询将导致:

Category - Qty

Basketball - 38

Soccer - 28

Hockey - 16

Football - 12

Baseball - 12

现在我要这样显示

Category - Qty Difference

Baseball - 45 +33

Football - 33 +21

Soccer - 21 -7

Hockey - 7 -9

Basketball - 3 -35

解决方法:

我要做的是创建另一个数组,该数组在键-值的基础上保存来自第一个查询的值,而在下一个查询中,仅从数组中相应的条目中减去值.

我认为这是使用2个查询的最简单,最快的方法.

注意:我没有测试此代码.

注意2:我假设第一类运动缺失将被计为0

注意3:我编写的代码仅用于显示计算差异的方法.让我知道是否应该更新它,以提供您在那里所需的完全相同的输出.

$results = array();

$result_account = $db->query("SELECT nid, COUNT(cat) AS qty, dte, descript, cat, name, user FROM client_note AS cn JOIN client_note_tag_items AS cnti ON cnti.note_id = cn.nid JOIN client_note_tags AS cnt ON cnt.tag_id = cnti.tag_id WHERE `dte` >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) AND name NOT LIKE 'Resolution%' GROUP BY cat ORDER BY qty DESC LIMIT 5");

if($count_account = $result_account->num_rows) {

while($row = $result_account->fetch_object()){

//output this query results here

$results[$row->cat] = $row->qty;

}

}

$result_previous = $db->query("SELECT nid, COUNT(cat) AS qty, dte, descript, cat, name, user FROM client_note AS cn JOIN client_note_tag_items AS cnti ON cnti.note_id = cn.nid JOIN client_note_tags AS cnt ON cnt.tag_id = cnti.tag_id WHERE (dte BETWEEN DATE_SUB(CURDATE(), INTERVAL 21 DAY) AND DATE_SUB(CURDATE(), INTERVAL 14 DAY)) AND name NOT LIKE 'Resolution%' GROUP BY cat ORDER BY qty DESC LIMIT 5");

if($count_previous = $result_previous->num_rows) {

while($row_p = $result_previous->fetch_object()){

//output this query results here

$results[$row_p->cat] = ((isset($results[$row_p->cat])) ? $results[$row_p->cat] : 0 ) - $row_p->qty;

}

}

foreach( $results as $key => $result) {

echo "

";

echo "

".$key."

".$result."

";

echo "

";

}

更新-显示第一周及其旁边的差异

你可以试试看我摆脱了foreach,仅使用查询循环来完成所有操作.

注意:同样,这是未经测试的代码

$results = array();

$result_account = $db->query("SELECT nid, COUNT(cat) AS qty, dte, descript, cat, name, user FROM client_note AS cn JOIN client_note_tag_items AS cnti ON cnti.note_id = cn.nid JOIN client_note_tags AS cnt ON cnt.tag_id = cnti.tag_id WHERE `dte` >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) AND name NOT LIKE 'Resolution%' GROUP BY cat ORDER BY qty DESC LIMIT 5");

$result_previous = $db->query("SELECT nid, COUNT(cat) AS qty, dte, descript, cat, name, user FROM client_note AS cn JOIN client_note_tag_items AS cnti ON cnti.note_id = cn.nid JOIN client_note_tags AS cnt ON cnt.tag_id = cnti.tag_id WHERE (dte BETWEEN DATE_SUB(CURDATE(), INTERVAL 21 DAY) AND DATE_SUB(CURDATE(), INTERVAL 14 DAY)) AND name NOT LIKE 'Resolution%' GROUP BY cat ORDER BY qty DESC");

if($count_previous = $result_previous->num_rows) {

while($row_p = $result_previous->fetch_object()){

//output this query results here

$results[$row_p->cat] = $row_p->qty;

}

}

if($count_account = $result_account->num_rows) {

while($row = $result_account->fetch_object()){

$difference = $row->qty - ((isset($results[$row->cat])) ? $results[$row->cat] : 0 );

echo "

";

echo "

".$row->cat."

".$row->qty."

".$difference."

";

echo "

";

}

}

标签:arrays,mysql,php

来源: https://codeday.me/bug/20191211/2106686.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值