Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Выборка из БД


Автор: wolfmessing 21.3.2008, 13:28
Всем доброво времени суток, возник такой вопрос по конкретному примеру
таблица статистики (ИП, браузеры, Оси):
Код

CREATE TABLE `brows_os` (
  `ip` varchar(50) NOT NULL,
  `brows` varchar(50) NOT NULL,
  `os` varchar(50) NOT NULL,
  `date` date NOT NULL default '0000-00-00'
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;


и я написал функцию котокая должна отображать разные баузеры и колличество их
Код

function brows_sts(){
      $txt = "";
      $sql = "";
      global $db;
      //первый запрос выберает уникальные записи браузеров
      $sql = $db->query("SELECT `brows` FROM `brows_os` GROUP BY `brows` DESC");
      if($db->num_rows($sql)>0){
            $txt .= '
            <table width=100% border=1>
                  <tr>
                  <th width=8%>Браузер</th>
                  <th>Колличество</th>                 
                  </tr>';
            while($res_br = $db->get_array($sql)){
                  $txt .='
                        <tr>
                        <td><center>'.$res_br['brows'].'</center></td>';
                        //второй запрос покажет нам количество уникальных браузеров
                        $sql_count = $db->query("SELECT COUNT( * ) AS `brows` FROM `brows_os` 
                                          WHERE `brows` = '".$res_br['brows']."'");
                        $res = $db->get_array($sql_count);
                        $txt .='<td><center>'.$res['brows'].'</center></td></tr>';
            }
            $txt .= "</table>";
      }
      return $txt;
}
echo brows_sts();
//$db->query -- mysql_query
//$db->num_rows -- mysql_num_rows
//$db->get_array --  mysql_fetch_array

в браузере у мну получается:
Код

Браузер        кол-во 
Opera9.2        2 
Opera9.1        1 
IE6.0           3 
Firefox2.0      1 


Проблемма в том что, ни как не могу отсортировать их по колличеству в порядке убывания, например вот так:
Код

Браузер        кол-во 
IE6.0           3
Opera9.2        2 
Opera9.1        1 
Firefox2.0      1

Просто не пойму как это сделать, может 2 запроса в 1 совместить?

Автор: Feldmarschall 21.3.2008, 13:35
ну, при таком оригинальном способе получения данных следовало бы, наверное, собрать информацию в массив, и сротировать уже его. 

но лучше, по-моему, просто добавить count(*) в первый запрос. Тебе так не кажется?

Автор: wolfmessing 21.3.2008, 13:37
Цитата

по-моему, просто добавить count(*) в первый запрос.

Просто первый запрос я вывел в первую колонку, ща буду пробовать с массивом, спс за совет

Автор: Feldmarschall 21.3.2008, 13:39
Вообще-то, совет был писать count(*) в запросе, разумеется.
И при чем здесь колонки - непонятно.
ты всегда так с базой данных работаешь - запрашиваешь только по одной колонке, а по две - никогда не пробовал?

Автор: wolfmessing 21.3.2008, 13:43
Feldmarschall, ты прав, спосиб большое
Код

SELECT `brows` , COUNT( * ) AS `br` 
FROM `brows_os` 
GROUP BY `brows` DESC 
ORDER BY `br` DESC

получилось 
Код

brows        br 
IE6.0        3
Opera9.2     2
Firefox2.0   1
Opera9.1     1

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)