我正在寻找一种更有效的方法来调试我的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
都是时间戳,在试图查看哪些条件得到满足(并且令人困惑)时会变得烦人,有时候这些条件可能会很多(而不是像例如,有没有办法快速确定哪一个被满足?没有手动删除它们中的每一个?
谢谢!
答案 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}