【问题标题】:Select from table based on other table with conditions根据有条件的其他表从表中选择
【发布时间】:2019-12-13 05:36:37
【问题描述】:

广告表

+----+----------+-------------------+
| id | username |    web_address    |
+----+----------+-------------------+
|  1 | admin    | my-best-positions |
|  2 | admin    | after_after       |
|  3 | admin    | after             |
|  4 | admin    | effort            |
+----+----------+-------------------+

活动日志表

+----+----------+-------------------+------------+
| id | username |    web_address    | timeperiod |
+----+----------+-------------------+------------+
|  5 | admin    | my-best-positions | 1565021746 |
|  4 | admin    | my-best-positions | 1564935346 |
|  3 | admin    | after_after       | 1564935346 |
|  2 | admin    | after             | 1564935346 |
|  1 | admin    | effort            | 1564935346 |
+----+----------+-------------------+------------+

上表中的时间段如下:

1565021746 = 格林威治标准时间:2019 年 8 月 5 日星期一下午 4:15:46

1564935346 = 格林威治标准时间:2019 年 8 月 4 日星期日下午 4:15:46

小提琴在哪里?

https://www.db-fiddle.com/f/BJJjFHbB1dY7EU1p3auRj/2

代码在哪里?

SELECT * 
FROM   advertisements 
WHERE  IF(EXISTS (SELECT 1 
                  FROM   activitylogs 
                  WHERE  web_address = advertisements.web_address 
                         AND Timestampdiff(day, From_unixtime(timeperiod), 
                             From_unixtime(Unix_timestamp())) 
                             >= 1 
                         AND Date(From_unixtime(timeperiod)) <> CURRENT_DATE() 
                  ORDER  BY timeperiod DESC) 
           OR NOT EXISTS (SELECT 1 
                          FROM   activitylogs 
                          WHERE  web_address = advertisements.web_address), 
       web_address <> '', 
              NULL) 

电流输出是多少?

+----+----------+-------------------+
| id | username |    web_address    |
+----+----------+-------------------+
|  1 | admin    | my-best-positions |
|  2 | admin    | after_after       |
|  3 | admin    | after             |
|  4 | admin    | effort            |
+----+----------+-------------------+

预期的输出是什么?

输出不应包含那些具有当前日期时间段的行,而仅包含那些时间段比当前时间戳小 1 天的行。例如,my-best-positions 被返回,即使它的时间段是今天。

请帮忙,因为它对我来说是一场噩梦。

【问题讨论】:

  • “今天”是“8 月 5 日”?
  • @Strawberry 根据 UTC 是的。使用这个epochconverter.com

标签: mysql sql database select


【解决方案1】:
SELECT a.* 
  FROM advertisements a
  LEFT
  JOIN activitylogs l
    ON l.web_address = a.web_address
   AND DATE(FROM_UNIXTIME(l.timeperiod)) = CURDATE()
 WHERE l.id IS NULL;

【讨论】:

  • 另外感谢您将消耗资源的存在子查询转换为联接。
  • 我怀疑不是 EXISTS 导致了问题,而是你那里的一大堆其他东西(我忽略了,因为我无法理解)
  • 我有一个问题,如果我想检查本地时间的时间段(本地用户的网络可用性),应该如何处理上面的语句?因为我正在存储 unix_timestamps 以便在用户之间进行维护。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-26
相关资源
最近更新 更多