我有一個類似Facebook的通知系統,用戶可以根據誰在特定站點發布/喜歡/評分獲得通知。將數據信息存儲在SESSION中而不是使用MySQL查詢?
在當你的一些內容的創作者或你已經張貼在具體內容與本下面的MySQL語句,你就會收到通知的那一刻:
SELECT
n.`id`,n.`site`,n.`site_id`,n.`creator_uid`,n.`type`,
nu.`id` AS nuid, nu.`uid` AS nu_uid, nu.`date`,
nr.`id` AS nrid, nr.`uid` AS nr_uid, nr.`is_read`,
u.`gender`
FROM `notification` AS n
LEFT JOIN `notification_user` AS nu ON nu.`nid` = n.`id`
LEFT JOIN `notification_read` AS nr ON nr.`nid` = n.`id`
LEFT JOIN `users` AS u ON u.`id` = nu.`uid`
WHERE
nu.`uid` != '".$_SESSION['uid']."' AND nr.`uid` = '".$_SESSION['uid']."'
OR
(
nu.`uid` = '".$_SESSION['uid']."' AND n.`type` = 'credits'
)
ORDER BY date DESC, nu.`id` DESC
LIMIT 7
現在我必須建立一個系統的朋友我也想把我的朋友們的活動也作爲通知展示出來。我想到在聲明中加入這個聲明,但是這個聲明被加載到整個網站的每個頁面上,我認爲這對性能來說已經相當困難。因此,通過users_friends
表每次也「收集」我的朋友用戶ID會更難以表現,我想。因此,我認爲,一旦存儲在我的SESSION這個朋友的用戶ID數據是這樣的:
// get friends user ids
$result = mysql_query("SELECT
CASE
WHEN `sent_uid`='".$_SESSION['uid']."' THEN `get_uid`
WHEN `get_uid`='".$_SESSION['uid']."' THEN `sent_uid`
END AS uid
FROM `users_friends` WHERE `status`='1' AND
(`get_uid`='".$_SESSION['uid']."' OR `sent_uid`='".$_SESSION['uid']."')
") or die(mysql_error());
$i=1;
$num_rows = mysql_num_rows($result);
if (!empty($num_rows) && empty($_SESSION['friends']))
{
while ($data = mysql_fetch_assoc($result))
{
$_SESSION['friends'][] = $data['uid'];
}
}
現在我有一個名爲$_SESSION['friends']
包含「39,2,49」例如值的數組。我還沒有想過現在在通知查詢中實現這個功能,因爲我想首先詢問這種嘗試是否合理,或者我應該採取另一種方式來做到這一點?我很欣賞任何建議。
「你應該持久保留」是什麼意思? (英語不是我的母語)。謝謝,我會研究這一點。我從來沒有使用過PHP框架,並在Bootstrap和JQuery的幫助下自己編寫代碼。因此,這基本上和一般來說都比在康斯坦丁的回答中所說的會話中存儲數千個數據更合適? – AlexioVay 2014-12-14 06:06:12
嘿@Vay沒問題英語也不是我的母語。堅持數據意味着將數據存儲在數據庫,文件系統中,而不是臨時存儲。基本上,Session只是服務器Ram內存中的一些東西。想象一下你的網站有一個搜索表單,你想記住你的用戶的最後一次搜索,也許這是完美的存儲會話。因爲你不需要將它存儲在數據庫中。在您的示例中,您需要將此信息存儲在數據庫(持久數據)中,以便將此數據從此會話中提取出來(例如,另一個用戶獲取此用戶的好友列表) – jhmilan 2014-12-14 10:02:23