mysql使用内部连接根据数据库中的日期范围显示数据

Posted

技术标签:

【中文标题】mysql使用内部连接根据数据库中的日期范围显示数据【英文标题】:mysql display data based on date range from database using inner join 【发布时间】:2019-11-20 12:09:46 【问题描述】:

我有两个表事件和会话,看起来像这样

事件表

会话表

我想根据日期范围显示数据

这是我的解决方案

SELECT sessions.sid, events.datetime, count(*) as num_rows, 
  count(distinct sessions.sid) as sessions, 
  sum( targetbuttonname = 'kredyt' ) as num_kredyt, 
  sum( targetbuttonname = 'konto' ) as num_konto,
  sum( targetbuttonname = 'czat' ) as num_czat,
  sum( targetbuttonname = 'video-voice_btns' ) as num_voice,
  sum( targetbuttonname = 'video-close_btn' )  as num_close,
  sum( targetbuttonname = 'video-muted_btn' ) as num_muted,
  sum( targetbuttonname = 'video-play_btn' )  as num_play,
  sum( targetbuttonname = 'video-pause_btn' )  as num_pause,
  sum( targetbuttonname = 'video-replay_btn' ) as num_replay, 
  sum(watchtime) as num_watchtime, 
  sum(devicetype ='Computer') as num_computer from events 
  INNER JOIN sessions ON (events.sid =sessions.sid) 
  WHERE datetime BETWEEN '2019-11-11' AND '2019-11-21'

不幸的是,当我在 phpmyadmin 上运行脚本时,出现以下错误

1052 - 列:where 子句中的“日期时间”不明确

我的代码做错了什么?

这里是 jsfiddle demo

【问题讨论】:

所以用它来自的表名来限定它。事实上,限定所有列引用,以便清楚它们来自哪里——对于编译器和人员。 datetime 在两个表中,只需添加 table.column。例如:sessions.datetime 【参考方案1】:

您的两个表中都有“日期时间”列。所以当你说:

INNER JOIN sessions ON (events.sid = sessions.sid) 
WHERE datetime BETWEEN '2019-11-11' AND '2019-11-21'

它不知道您的“日期时间”指的是哪个表。

您需要做的是引用您正在使用的表中的列,例如:

INNER JOIN sessions ON (events.sid = sessions.sid) 
WHERE sessions.datetime BETWEEN '2019-11-11' AND '2019-11-21'

或者喜欢:

INNER JOIN sessions ON (events.sid = sessions.sid) 
WHERE events.datetime BETWEEN '2019-11-11' AND '2019-11-21'

【讨论】:

【参考方案2】:

根据您要考虑的日期时间使用WHERE events.datetime BETWEEN '2019-11-11' AND '2019-11-21'WHERE sessions.datetime BETWEEN '2019-11-11' AND '2019-11-21'

两个表中都存在名称为 datetime 的列,因此您必须限定列名。

【讨论】:

以上是关于mysql使用内部连接根据数据库中的日期范围显示数据的主要内容,如果未能解决你的问题,请参考以下文章