2011-09-08 4 views
0

Ce code fonctionne très bien mais je ne sais pas comment le commander.Commander les résultats après les avoir comptés PHP

Exemple de sortie:

Clics 3 Mozilla Firefox
Hits 2 Google Chrome
Résultats 4 Internet Explorer
Hits 2 Apple Safari
Clics 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

Comment voulez-vous voir commander? L'exemple de sortie est-il composé de plusieurs colonnes ou d'une seule chaîne? – Sparky

+0

Je veux que les résultats soient dans l'ordre décroissant. L'exemple de sortie ci-dessus est la façon dont il s'affiche maintenant. – MHowey

Répondre

1

Tweak la 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; 

Et il vous suffit d'interroger une fois, puis itérer les résultats

+0

Merci pour le "real_user! = 'Bot'" mais je n'ai pas ** hits ** à commander par. Si je l'ai fait, je n'aurais pas besoin de compter. Sauf si Im manque quelque chose – MHowey

+0

mettre à jour à nouveau le SQL – ajreal

0

Essayez de commander quelque chose comme:

  • SUBSTRING_INDEX (colName, 2) -> HITS 2 Opera ===> HITS 2
  • SUBSTRING (, INSTR (» », colName)) -> HITS 2 ==> 2
  • CAST (AS SIGNE) -> Convertir 2 au numéro

Mettre le tout ensemble

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

Cela devrait faire ce que vous cherchez ...

Questions connexes