我正在使用 mysql 做一些工作并且有一个独特的情况,我唯一的解决方案是定义所有可能的组合。我想知道是否有更简单/更好的方法来做到这一点。
这条sql创建5类mpgs
SELECT
count(if(a.mpgcombined < 18, a.mpgcombined, NULL)) as under18,
count(if(a.mpgcombined >= 18 AND a.mpgcombined <= 23, a.mpgcombined, NULL)) as under24,
count(if(a.mpgcombined > 23 AND a.mpgcombined <= 28, a.mpgcombined, NULL)) as under29,
count(if(a.mpgcombined > 28 AND a.mpgcombined <= 35, a.mpgcombined, NULL)) as under36,
count(if(a.mpgcombined > 35, a.mpgcombined, NULL)) as over35
FROM styles a, jpgs b, models c, divisions d
WHERE d.divisionid = c.divisionid
AND a.styleid = b.styleid
AND c.modelid = a.modelid
AND a.mktclassid in ($this->mktclassids)
$this->where
AND a.sequence = 0;
然后,这些类别和计数会以一堆复选框的形式显示给用户,但前提是计数大于 0。
然后,用户可以根据需要选择尽可能多的类别范围。
我遇到的问题是,如果用户选择 under18 和 under24,这样的 where 子句将不起作用:
AND a.mpgcombined < 18 AND a.mpgcombined >= 18 AND a.mpgcombined <= 23
这显然会起作用:
AND a.mpgcombined <= 23
这个东西是动态的,所以我不知道条件会是什么,所以像第一个选项这样的东西让我不必为每个可能的场景定义 sql。
无论如何不必为每种可能的组合定义sql吗?sql不是我的强项。
如果你认为这个查询对 where 子句没有意义,不要担心如果用户选择 mpg,这个 sql 不会被调用,它会被禁用,但是 where 子句会应用于其他几个查询。
如果选择了 under18、under36 和 over35,我将如何生成 sql?用户可以选择他们想要的任何组合。
这就是我的想法……基本上是 49 或任何 if 和 elseif 语句用于每种可能的情况。
if(under18 && under24)
$where = 'AND a.mpgcombined <= 23';
elseif (under29 && under18....)
你可以得到我在想什么的图片。