2014-02-20 3 views
0

Я столкнулся с ситуацией, когда мне нужно избегать повторяющихся чисел внутри самого запроса.Msql select sum limit ignore

У меня есть такой код:

$rangelimit  = range(6, 60, 6); 
    $name   = "some name"; 
    foreach($rangelimit as $limit){ 

     $result = $db->query("SELECT SUM(numbers) 
        FROM (SELECT numbers FROM table WHERE name ='".$name."' 
        ORDER BY id ASC LIMIT 0,".$limit.") 
        AS SUBT"); 

     if($result) 
      echo $limit.' value is .' $result; 

    }// end foreach 

    // outputs 
    // 6 value is 22 
    // 12 value is 32 
    // 18 value is 40 
    // but here is the problem once there is no more results 
    // i want it to stop and give 0 
    // 24 value is 40 
    // 30 value is 40 ... and keeps going on till 60 as set on the range. 

Мой вопрос запрос, связанные, как я могу остановить его в цикл по каждому элементу, но я хочу знать, есть ли способ, что вы можете сказать, запрос, чтобы остановить, если нет результата до предела?

ответ

1

Если я правильно понял, вы хотите, чтобы сумма была равна 0, когда в листе для лимита недостаточно строк. Ниже приведено способ:

SELECT (case when count(*) = ".$limit." 
      then SUM(numbers) 
      else 0 
     end) 
FROM (SELECT numbers 
     FROM table 
     WHERE name ='".$name."' 
     ORDER BY id ASC LIMIT 0,".$limit." 
    ) SUBT; 
+0

Благодарим вас, он работает как можно лучше. – Genus

+0

Что делать, если есть строки, но не до предела, можем ли мы использовать что-то вроде большего или меньшего? count (*)> или <". $ Limit."? – Genus

+0

@Genus. , , Как ни странно, я сначала написал запрос таким образом. Но, из-за предела, либо число будет равно пределу, либо значение должно быть 0. –