Php 基于不同键和时间戳检索行的mysql查询

Php 基于不同键和时间戳检索行的mysql查询,php,mysql,Php,Mysql,我们有一个“交易”表,记录我们网站上发生的各种事件。其中一个特别需要每晚在其上运行“清理”过程。以下是我的专栏(简化): 以下是我想要检索的内容(以散文形式): 在过去6周内(基于txDate)从vistiorID中为特定brandName读取txName的。在6周的时间内,visitorID完全有可能(而且很可能)对一个以上的brandName进行“读取”txName。我们只有5个brandName,所以我完全满足于为单个brandName构建一个流程,并重复5次 我的大脑只能进行2次MySQ

我们有一个“交易”表,记录我们网站上发生的各种事件。其中一个特别需要每晚在其上运行“清理”过程。以下是我的专栏(简化):

以下是我想要检索的内容(以散文形式):

在过去6周内(基于
txDate
)从
vistiorID
中为特定
brandName
读取
txName
。在6周的时间内,
visitorID
完全有可能(而且很可能)对一个以上的
brandName
进行“读取”
txName
。我们只有5个
brandName
,所以我完全满足于为单个
brandName
构建一个流程,并重复5次

我的大脑只能进行2次MySQL SELECT查询(6周前的记录,6周内的记录),然后在这两个集合中循环几次,以获得需要处理的最终记录数组。但我确信有一种更有效的方法我就是不明白


我希望这是有道理的…谢谢任何能帮上忙的人。我认为真正让我困惑的部分是试图选择那些没有记录交易的人,而不是那些记录了交易的人。你可以尝试以下方法:

  SELECT DISTINCT(visitorID) 
    FROM transactions 
   WHERE txName = "READ" 
     AND txDate <= '$6weeksago'   
GROUP BY brandName
SELECT DISTINCT(visitorID)
来自交易
其中txName=“读取”

txDate您只想选择txDate在6周前的记录吗?好问题。我意识到我只需要每个visitorID(每个品牌名)的一个实例。我只需要一个特定类型的txName(条目名为“READ”,如果有人认为“READ”一词与阅读表格有关,那么很抱歉,这将是我的两个查询中的第一个,如果我不能想出一个更有效的方法来做这件事的话。第二个选项是“从txName=“READ”和txDate>=“$6weeksago”按品牌名称分组的事务中选择不同的(visitorID)(换句话说,与时间表相反)。然后比较这两组记录,排除两组中都有visitorID的记录。但这能在一个查询中完成吗?我想不起来:(和您一样,我可能会将两个查询都拉入数组并进行比较。但是,您可以使用php的array_key_exists函数在循环过程中获得一些效率,并避免对第一个数组中的每个键循环通过第二个数组。您只需循环通过Array1,并在执行时检查Array2中是否存在相同的键。因此应该避免您需要多次循环。。。
  SELECT DISTINCT(visitorID) 
    FROM transactions 
   WHERE txName = "READ" 
     AND txDate <= '$6weeksago'   
GROUP BY brandName