从SQL表中检索数据

时间:2018-04-04 10:32:19

标签: php mysql sql

我有一个表格,其中存储了所有操作日志。它包含" user_id" (标记用户)," statement_id" (标记已经处理过的声明)," action_date" (标记行动时间)和" action_type" (标记已采取的行动)。用户可以处理许多可以执行许多操作的语句。

我需要生成一个查询,该查询将显示在特定时间(在2018年3月1日到2018年3月30日之间)处理的语句 - 我可以这样做。我的困难是限制结果。我的意思是如何限制结果:

Statements that were worked on: 30, 30, 30, 18, 18, 42, 42, 42

对此:

Statements that were worked on: 30, 18, 42

我尝试使用像这样的查询,但我没有专业。我发现很难理解一些限制SQL命令的概念。

SELECT * FROM action_log 
WHERE user_id = 1 
AND action_date >= 1519858800 
AND action_date <= 1522447200 
GROUP BY user_id 
HAVING user_id = 1 
ORDER BY id DESC

我将非常感谢任何帮助。

3 个答案:

答案 0 :(得分:3)

我认为您正在寻找SELECT DISTINCT

SELECT DISTINCT statement_id
FROM action_log al
WHERE user_id = 1 AND
      action_date >= 1519858800 AND action_date <= 1522447200
ORDER BY statement_id DESC;

使用UNIX_TIMESTAMP()

可能会更容易维护
SELECT DISTINCT statement_id
FROM action_log al
WHERE user_id = 1 AND
      action_date >= UNIX_TIMESTAMP('2018-03-01') AND
      action_date <= UNIX_TIMESTAMP('2018-03-30')
ORDER BY statement_id DESC;

答案 1 :(得分:0)

我猜你只需要唯一的价值观。 在SQL中有一个特殊的声明。 Use SELECT DISTINCT

SELECT DISTINCT * FROM action_log WHERE user_id = 1 AND action_date >= 1519858800 AND action_date <= 1522447200 GROUP BY user_id HAVING user_id = 1 ORDER BY id DESC;

答案 2 :(得分:0)

您可以在两者之间用于比较action_date。你可以消除条件,因为它已经在哪里使用了。如果user_id = 1且HAVING user_id = 1,则结果相同。希望以下代码适合您。

pbt