Что-то не соображу. PHP: <? $get1=mysql_fetch_array(mysql_query("SELECT count(*) as nbr FROM test WHERE val<=2")); $get2=mysql_fetch_array(mysql_query("SELECT count(*) as nbr FROM test WHERE val>=4")); $res=$get2['nbr']-$get1['nbr']; ?> Можно как-то это одним запросом сделать? И будет ли этот запрос быстрее, чем вот это? Значение val - от 0 до 5 включительно.
[sql]select COUNT(case when val>=4 then 1 else null end) as get1, COUNT(case when val<=2 then 1 else null end) as get2 from test[/sql] но скорее всего два запроса будут быстрее.
Спасибо. Классный запрос. Время выполнения 0,02 сек. Результат - get1=3276, get2=0 (там действительно ноль). Итого - я сильно сомневаюсь, что два запроса будут быстрее, чем 0,02 сек. В таблице примерно 10к записей. В запросе, естесно, были ещё WHERE ...
Кстати, работает вот так: [sql]select (COUNT(case when val>=4 then 1 else null end)) - (COUNT(case when val<=2 then 1 else null end)) as get1 from test[/sql] с той же скоростью. От 0,02 до 0,08 сек.
RomanBush Если на поле val навесить индекс, то 2 запроса будут крайне экономными (скорее всего, мускул даже в таблицу не полезет, одного индекса будет достаточно для определения количества записей). Комбинированный же запрос будет всегда перепахивать таблицу целиком, т.к. нет блока WHERE.