合并数组,一起添加值

时间:2014-06-17 17:02:20

标签: php mysql sql

我的数据库中有两个表:

网页记录

searchTerm | userId |日期| hasLocation | historyId

LocationHistory。

userId |日期| lat | lng |金额| historyId

我正在排队。

网络历史记录:

$stmt_hour = $conn->prepare("SELECT HOUR(date) as hr, COUNT(*) as num_rows FROM    
                             webHistory WHERE userId=? AND date BETWEEN (SYSDATE() - INTERVAL 1 DAY) 
                             AND SYSDATE() GROUP BY HOUR(date);");

$stmt_hour->bind_param("s", $userid);
$stmt_hour->execute();
$stmt_hour->bind_result($a, $b, $c);
  while($stmt_hour->fetch()) {
    $hourArr[$a] = $c;
  }

位置记录

$stmt_hour = $conn->prepare("SELECT HOUR(date) as hr, COUNT(*) as num_rows FROM    
                             locationHistory WHERE userId=? AND date BETWEEN (SYSDATE() - INTERVAL 1 DAY) 
                             AND SYSDATE() GROUP BY HOUR(date);");

$stmt_hour->bind_param("s", $userid);
$stmt_hour->execute();
$stmt_hour->bind_result($a, $b, $c);
  while($stmt_hour->fetch()) {
    $hourLocArr[$a] = $c;
  }

当用户使用单词搜索时,它会在webHistory中排成一行,因此要获取用户在过去24小时内所做的所有搜索,我会计算两个日期之间的行数。

当用户按位置搜索时,将检查数据库以查看用户是否已在该位置搜索过,如果是,则增加金额,如果不是,则添加值为1的行。然后我从第二个查询中得到了这个的SUM。

最后,如果用户通过word&查询这两个操作都会将行添加到webHistory并在locationHistory中添加/递增。

我需要将查询1的响应添加到查询2的响应中,格式为hour =>量。所以:

查询“网络历史记录”:

10 => 9
16 => 4
20 =>2

查询位置记录

4 => 45
10 => 2
22 => 12

查询总和+位置

4 => 45
10 => 11
16 => 4
20 => 2
22 => 12

最后,如果用字和&搜索查询我只需要取位置值,我猜我会通过一个唯一的Id来做。到目前为止,我确实有一个独特的Id字段。但是,由于locationHistory增加了amount字段,因此导致唯一id只是最新的ID并且对于这个问题是多余的,我不知道如何处理它。

我在考虑将数组合并到array_marge()?但这将是解决这个问题的最佳方式,最重要的是我将如何处理问题的后半部分。

干杯

1 个答案:

答案 0 :(得分:0)

阅读stackoverflow阵列联盟后,由于这段话,你最好的选择(第二个问题)

  

+运算符返回附加到左侧数组的右侧数组;对于存在于两个数组中的键,将使用左侧数组中的元素,并且将忽略右侧数组中的匹配元素。

$webHistory = array(10 => 9,
16 => 4,
20 =>2);

$locationHistory = array(4 => 45,
10 => 2,
22 => 12);

print_r($locationHistory + $webHistory );

->Array ( [4] => 45 [10] => 2 [22] => 12 [16] => 4 [20] => 2 ) 

它保留密钥并使用locationHistory作为主要信息源。 :d

因此,请确保将webhistory合并到locationhistory上,这样如果它们重叠,则会覆盖以前的值。

修改

以下解决了第一个问题

$webHistory = array(10 => 9,
16 => 4,
20 =>2);

$locationHistory = array(4 => 45,
10 => 2,
22 => 12);

$tempArray = $locationHistory;
foreach ($webHistory as $key => $value){
   $tempArray[$key] = $value + $tempArray[$key];
}
print_r($tempArray);

->Array ( [4] => 45 [10] => 11 [22] => 12 [16] => 4 [20] => 2 )