检查满足哪些SQL条件

时间:2017-01-05 22:04:45

标签: mysql phpmyadmin

我正在寻找一种更有效的方法来调试我的SQL查询,我使用phpMyAdmin进行大多数查询检查。这是一个查询示例:

SELECT * FROM `schedule` WHERE
(
    `start` = {$start} OR
    ((`start` + (`runtime` * 60)) > {$start} AND (`start` + (`runtime` * 60)) <= {$end}) OR
    (`start` > {$start} AND `start` < {$end}) 
) AND `group_id` = {$group}

现在考虑$ start和start都是时间戳,在试图查看哪些条件得到满足(并且令人困惑)时会变得烦人,有时候这些条件可能会很多(而不是像例如,有没有办法快速确定哪一个被满足?没有手动删除它们中的每一个?

谢谢!

2 个答案:

答案 0 :(得分:0)

不是一个漂亮的解决方案,但您可以将每个条件添加到列列表中:

var base = [1,1,1,2,3,5,7,9,14,19,28,40,56,114,232,330];
var sky = [0,0,0,3,4,5,6,7,8,9,10,11,12,14,16,17];
var ite = [64,52,23,38,13,15,6,4,6,3,2,1,2,1,1,1];

var result = sky.reduce(function(r, n, i) {
  var last = r.sky.length - 1;
  
  if(n === r.sky[last]) {
    r.ite[last] += ite[i];
  } else {
    r.base.push(base[i]);
    r.sky.push(n);
    r.ite.push(ite[i]);
  }
  
  return r;
}, { base: [], sky: [], ite: [] });

console.log('new base:', result.base.join(','));
console.log('new sky:', result.sky.join(','));
console.log('new ite:', result.ite.join(','));

答案 1 :(得分:0)

您可以将布尔表达式放在select-list中,并为它们指定有意义的列名。这些表达式仅针对满足WHERE子句条件的行进行评估,因此它不会显着增加额外的工作量。这些表达式在查询结果集中返回1(true)或0(false)。

SELECT ...,
  `start` = {$start} AS is_start,
  ((`start`+(runtime*60)) > {$start} AND (`start`+(runtime*60)) <= {$end}) AS is_overlapping,
  (`start` > {$start} AND `start` < {$end}) AS is_between_start_and_end
FROM `schedule` 
WHERE
(
  `start` = {$start} 
  OR ((`start`+(runtime*60)) > {$start} AND (`start`+(runtime*60)) <= {$end}) 
  OR (`start` > {$start} AND `start` < {$end}) 
) AND group_id = {$group}