2011-09-08 2 views
0

Этот код отлично работает, но я потерял его, как заказать его.Закажите результаты после их подсчета PHP

Пример вывода:

Hits 3 Mozilla Firefox
Hits 2 Google Chrome
Hits 4 Internet Explorer
Hits 2 Apple Safari
Hits 1 Opera

$result = mysql_query("SELECT * FROM WEB_STATS WHERE real_user NOT LIKE 'Bot'"); 
$duplicates = array(); 
while($row = mysql_fetch_array($result)) { 
    $results = $row['user_browser']; 

if (!array_key_exists($results, $duplicates)) { 
    $browsersLive[] = $results; 
    $duplicates[$results] = 1; ## mark that we've already output this records 
    } 
    } 

foreach($browsersLive as $browserswive){ 
    $query = "SELECT COUNT(*) FROM WEB_STATS WHERE user_browser = '$browserswive'"; 
    $result = mysql_query($query) or die("Sorry, didn't work" . mysql_error()); 
    $browser_count = mysql_result($result, 0); 

    if($browserswive == "Mozilla Firefox"){ 
    echo '<img alt="FireFox" height="32" src="images/fox-icons.png" width="32">Hits '.$browser_count.' '.$browserswive.'<br>'; 
} 
    elseif($browserswive == "Internet Explorer"){ 
    echo '<img alt="Internet Explore" height="32" src="images/ie-icons.png" width="31">Hits '.$browser_count.' '.$browserswive.'<br>'; 
} 
    elseif($browserswive == "Google Chrome"){ 
    echo '<img alt="Google Chrome" height="32" src="images/chrome-icons.png" width="32">Hits '.$browser_count.' '.$browserswive.'<br>'; 
} 
    elseif($browserswive == "Apple Safari"){ 
    echo '<img alt="Apple Safari" height="32" src="images/safari-icons.png" width="32">Hits '.$browser_count.' '.$browserswive.'<br>'; 
} 
    elseif($browserswive == "Opera"){ 
    echo '<img alt="Opera " height="33" src="images/opera-icons.png" width="33">Hits '.$browser_count.' '.$browserswive.'<br>'; 
} 
} 
+0

Как вы хотите, чтобы он заказал? Является ли пример вывода несколькими столбцами или одной строкой? – Sparky

+0

Я хочу, чтобы хиты выполнялись в порядке убывания. Вышеприведенный пример показывает, как он теперь отображается. – MHowey

ответ

1

подправить SQL до

SELECT user_browser, COUNT(*) as hits 
FROM WEB_STATS 
WHERE real_user!='Bot'  <-- replace the NOT LIKE 'Bot' 
GROUP BY user_browser 
ORDER BY hits DESC; 

И вам просто нужно запросить один раз, а затем перебирать результаты

+0

Спасибо за «real_user! = 'Bot», но у меня нет ** хитов ** для заказа. Если бы я сделал, мне не нужно было бы рассчитывать. Если я не пропустил что-то – MHowey

+0

снова обновить SQL – ajreal

0

Попробуйте заказывать что-то вроде:

  • SUBSTRING_INDEX (ColName, 2) -> HITS 2 Opera ===> ХИТЫ 2
  • SUBSTRING (, INSTR (»», ColName)) -> HITS 2 ==> 2
  • CAST (как знаковые) -> Преобразовать 2 на номер

Собираем все вместе

ORDER BY CAST(substring(substring_index(colName,2),INSTR(' ',colName)) AS SIGNED) 

Это должно делать то, что вы ищете ...

Смежные вопросы