我有以下表格:困惑如何正確JOIN
- 日誌 - 存儲每次互動的信息。 clickID(唯一)和businessID(不唯一)上的索引。
- 操作 - 存儲有關客戶採取的每個特定操作的信息。 indexID,actionID,personID,businessID上的索引
- customers - 存儲有關特定業務的每個特定客戶的信息。 personID和businessID上的索引(兩者都不是唯一的,但兩者的組合將會是)
- people - 存儲關於每個作爲一個或多個企業的客戶的人的統計數據。 personID索引(唯一)。
我需要在一個結果集中獲取所有這些信息才能從中提取數據,以便我可以將交互連接到個人數據以及他們的業務特定數據。
我目前使用兩個數據集,我關聯在PHP中,但我寧願從一個返回的數據集工作,如果它是有道理的。
這裏是我當前的查詢集合:
SELECT * FROM `log`
WHERE `timestamp` >= STARTTIME AND `timestamp` <= ENDTIME AND `pageID`='aPageID' AND `businessID`='aBusinessID'
ORDER BY `timestamp` DESC
SELECT * FROM `actions` AS `t1`
INNER JOIN `people` AS `t2` ON (`t1.personID`=`t2.personID`)
INNER JOIN `customers` AS `t2` ON (`t1.personID`=`t3.personID` AND `t1.businessID`=`t3.businessID`)
WHERE `timestamp` >= STARTTIME AND `timestamp` <= ENDTIME AND `pageID`='aPageID' AND `businessID`='aBusinessID'
ORDER BY `timestamp` DESC
好像我最好能夠更好地與一個查詢,其中actionID(以及所有下面的結果)可能爲空,但我真的不知道看起來如何,或者它會如何影響性能。幫幫我?
難道你不錯過一個企業表嗎? businessID指向什麼? –
@FélixGagnon-Grenier有一個業務表,但它與這個查詢無關,對於這個查詢來說所有重要的事情都是關於擁有一個頁面的單個業務。我們知道這兩個值都會進入這個查詢。 –