Mysql查询使用“WHERE IN”和LIMIT选择最高ID,没有返回足够的结果

时间:2014-03-19 10:18:04

标签: php mysql

问题: 如果我将LIMIT更改为IN语句中有多少结果,则此查询仅显示正确的答案。

目标: - 我希望我的变量(Car,Van,Bike,Bus)中的金额等于限额金额。

我的IN语句实际上是一个变量,可以有1-50个项目(卡车,出租车等),但是为了方便我使用了4.如果它有3个项目,我必须将LIMIT更改为3并且等等。

我可以进行查询,然后爆炸到数组,并计算项目使用此数字作为变量添加到限制,但这是2个查询!

易于阅读的查询: -

$result = mysql_query("SELECT total FROM table1 WHERE client='$client'
and campaign IN ('Car', 'Van', 'Bike', 'Bus') ORDER BY id DESC limit 4");

汽车,货车,自行车和公共汽车来自数据库查询......

$result = mysql_query("SELECT rules FROM combined WHERE groupname='$groupname'");

这产生了'Car','Van','Bike','Bus'

模拟数据: - 车= 1, 范= 2, 自行车= 3, 巴士= 4。

此查询的答案是1 + 2 + 3 + 4 但是,如果我有一个规则,其中在竞选活动中有5个部分它将是相同的,因为它只获取4个答案而不是5个。 所以它仍然只增加1 + 2 + 3 + 4,因为限制是4而不是现在5。

粗体部分实际上存储在数据库中,并添加了斜杠。 $ rule = 'Car','Van','Bike','Bus';

真正的mysql语句如下: -

$result = mysql_query("SELECT total FROM table1 WHERE client='$client' 
and campaign IN ($rule) ORDER BY id DESC limit 4");

=============================================== ======================== 解释

以下查询获取此数据('Car','Van','Bike','Bus')

 $result = mysql_query("SELECT rules FROM combined WHERE groupname='$groupname'");

我把它放在一个名为$ rule

的变量中

然后我运行此查询

$result = mysql_query("SELECT total FROM table1 WHERE client='$client'
and campaign IN ($rule) ORDER BY id DESC limit 4");

这将为每个返回一个数字(Car = 1的总数,Van = 2的总数)

问题是,当我的$规则中超过4时,由于限制,它不会返回超过4。我每次都要改变它。

我可以将两个查询结合起来....并获得每个Car,Van,Bike活动的最高ID。 (出现在我的IN语句或$ rule中)

希望这更清楚。

1 个答案:

答案 0 :(得分:0)

我不确定这是否真的是你所需要的,但它解释了我对这个问题的解释:

SELECT total
FROM table1
JOIN (
    SELECT MAX(id) as id
    FROM table1
    WHERE campaign IN ('Car', 'Van', 'Bike', 'Bus')
    GROUP BY campaign
) t ON t.id = table1.id