mySQL 条件选择?

标签 mysql sql

表:id状态时间

$now = time(); // current timestamp

$statuses = array (
    'ST1' => 60,  // (seconds)
    'ST2' => 120,  // (seconds)
    'ST3' => 180,  // (seconds)
);

$query = 'SELECT id FROM table WHERE status IN("ST1", "ST2", "ST3") AND time ... LIMIT 1';

现在我想从表中选择 id of 1 row,其中:

如果 status 是 ST1:(time + 60) > $now

如果 status 是 ST2: (time + 120) > $now

如果 status 是 ST3:(time + 180) > $now

因此,如果该行的列 status = "ST1",它会检查列 time + 60 是否大于 $now这是当前时间戳,依此类推。

最佳答案

只需使用基本逻辑:

SELECT l.id
FROM leads l 
WHERE ((l.status = 'ST1' and l.time > date_sub(now(), interval 60 second)) or
       (l.status = 'ST2' and l.time > date_sub(now(), interval 120 second)) or
       (l.status = 'ST3' and l.time > date_sub(now(), interval 180 second)) 
      )
LIMIT 1;

我假设 (time + xx) > $now 指的是秒。另外,我鼓励您使用数据库时间,而不是传入它。(当然,您可以将 now() 替换为 $now —— 或者更好一个参数——如果您有充分的理由从应用程序中传递时间。)

老实说,我可能会把它放在派生表中:

SELECT l.id
FROM leads l JOIN
     (SELECT 'ST1' as status, 60 as diff UNION ALL
      SELECT 'ST2' as status, 120 as diff UNION ALL
      SELECT 'ST3' as status, 180 as diff
     ) s
     ON l.status = s.status
WHERE l.time > date_sub(now(), interval s.diff second)
LIMIT 1;

关于mySQL 条件选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41909832/

相关文章:

mysql - 选择按存在于另一个表中的表过滤的所有行

Mysql,每天的总TimeDiff。仅包括大于 2 分钟的 TimeDiff

sql - 自连接查询以查找重复记录

sql - Mysql:如何从其他sql脚本文件中调用sql脚本文件?

mysql - 如何从 mySql 中的字段值中删除双引号?

php - 在 PHP 中更新 JSON 数组

mysql - 选择查询中的最大序列号

sql - oracle sql和pl/sql中varchar2的区别

sql - 如果存在连接的数据条目,则返回 true (1),否则在 MS-SQL 中返回 false (0)

c# - EF 中的 Include 和 SQL 中的 Join 之间的区别