我在我的數據庫中的兩個表:合併陣列,增加值加在一起
網頁記錄
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;
}
當一個字一個用戶搜索,它一行到網絡歷史記錄,所以讓所有的搜索的用戶在過去的24小時內創建了兩個日期之間的行。
當用戶按位置進行搜索時,將檢查數據庫以查看用戶是否已在該位置搜索,如果是,則數量遞增,如果不是該行添加值爲1。然後我從第二個查詢中得到這個SUM。
最後,如果用戶搜索字&查詢兩個操作發生將行添加到webHistory並在locationHistory中添加/遞增。
我需要將查詢1的響應添加到查詢二的響應中,格式爲小時=>金額。所以:
查詢 '網絡歷史記錄':
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遞增金額字段,從而導致唯一的ID只是最近的ID和冗餘的這個問題,我不知道如何處理它。
我想組合數組來簡單地使用array_marge()?但是,這將是解決這個問題的最好方式,最重要的是我將如何處理問題的後半部分。
乾杯
爲什麼不聯合查詢(如果需要),並做邏輯SQL? – kero
我曾考慮過這個問題,但是如果搜索只在webHistory或Location上,但是如果它們都在兩者上,則我將如何組合查詢。如果只用一個詞進行搜索,它會在webHistory中添加一行。如果僅在該位置製作,則會在locationHistory中添加一行/增加數量。如果搜索是通過一個單詞和位置進行的,它會增加或增加兩者,但它只計算一次搜索,因此我只需要其中一個表的結果。 –
這兩個表格有幾個共同的字段。您可能可以使用連接。實驗有很多種。 –