Возникла следующая проблема. Есть функция которая делает выборку из множества таблиц с помощью UNION ALL, проблема в том что когда будет сформирован последний sql запрос вместо UNION ALL должно выводится ")".
пример кода.
for($x=0; $x >= -2; $x--){
$date = date('Ym',strtotime(''.$x.' months'));
$datecomp = date('Y-m-d H:i:s',strtotime(''.$x.' months'));
if(($from <= $datecomp)&&($to >= $datecomp)){
$sql .= "
(SELECT *
FROM logs_{$date}
WHERE
created >= '{$from}' AND
created <= '{$to}'
";
$iter[] = $x;
$sum_iter = count($iter);
if($sum_iter <= 2 ) $sql .= " ) UNION ALL ";
else $sql .= " ) ";
}
}
я делаю так, но это работает только когда я выбираю поиск за 3 месяца.
Подскажите, как сделать чтобы можно было выбирать за разное количество месяцев и при этом запрос строился правильно?
Спустя 8 минут, 57 секунд (16.02.2009 - 14:10) sergeiss написал(а):
Концовка цикла вообще какая-то "хитрая" и непонятная. Зачем подсчитывать количество итераций, когда достаточно просто сравнить текущее значение $x с пороговой величиной???
И если ты поменяешь начало цикла, напишешь
И если ты поменяешь начало цикла, напишешь
PHP |
for( $x=-2; $x<=0; $x++) |
то тогда вообще достаточно просто будет написать условие в конце цикла, 2 строки вместо твоих 4-х:
PHP |
if( $x == 0 ) $sql .= ' ) '; |
При этом ты можешь смело менять условие в начале цикла на начало месяца для анализа того или иного их количества, при этом не надо будет менять ничего более.
Спустя 14 минут, 56 секунд (16.02.2009 - 14:25) Guest написал(а):
большое спасибо. просто что то зациклило, именно на том решении и не как не мог отойти от него)