对如何正确加入感到困惑

时间:2014-05-21 19:15:43

标签: mysql

我有以下表格:

  • log - 存储有关每次互动的信息。 clickID(唯一)和businessID(非唯一)的索引。
  • 操作 - 存储有关客户采取的每项特定操作的信息。 clickID,actionID,personID,businessID
  • 上的索引
  • 客户 - 存储有关特定企业的每个特定客户的信息。 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(以及所有后续结果)可能为null,但我真的不知道它会是什么样的,或者它会如何影响性能。帮助

1 个答案:

答案 0 :(得分:0)

SELECT * FROM `log` AS t1
INNER JOIN `actions` AS t2 ON (t1.`clickID`=t2.`clickID` AND t1.`businessID`=t2.`businessID`)
INNER JOIN `customers` AS t3 ON (t1.`businessID`=t3.`BusinessID` AND t2.`personID`=t3.`personID`)
INNER JOIN `people` AS t4 ON (t2.`personID`=t4.`personID`)
WHERE `timestamp` >= STARTTIME AND `timestamp` <= ENDTIME AND `pageID`='aPageID' AND `businessID`='aBusinessID'
ORDER BY `timestamp` DESC