2011-06-09 61 views
0

需要一點幫助。一直在尋找,但我還沒有找到答案。希望你們可以幫忙!如何通過流行而不是隨機顯示標籤?

我正在對用戶在我的網站上輸入的標籤進行排序。我正在使用下面的代碼來調用標籤...

 $query="SELECT gtags FROM posts WHERE category='".mysql_real_escape_string($CATID)."' order by rand() limit 20"; 
    $results=$conn->execute($query); 
    $gtags = $results->getrows(); 
    for($i=0; $i<count($gtags);$i++) 

我怎樣才能過濾標籤的人氣,而不是隨機?我看到了rand()的順序,但我不知道如何去改變這種方式以達到某種流行度,比如標籤在數據庫中的使用次數。

有人能告訴我我做錯了什麼。我確定這很簡單,我只是一個小菜。 :) 謝謝大家。

+2

分享數據庫結構,我們不是魔術師。 – 2011-06-09 15:20:25

回答

1

更改您的查詢是這樣的:

$query="SELECT gtags FROM (
    SELECT gtags, (SELECT count(*) from posts tPost where tPost.gtags = posts.gtags) noOfApp 
    FROM posts WHERE category='".mysql_real_escape_string($CATID)."' 
) Pst 
    order by noOfApp limit 20"; 
1

在我看來,你沒有做錯什麼。你什麼都沒做。 :)

在我看來,你實際上是查詢帖子表中的標籤。很難指望這樣的領域,因爲它可能包含一個單獨的標籤列表。如果您需要一個包含所有標籤的單獨表格以及將標籤鏈接到帖子的交叉表格,則可以獲取所有標籤的列表,並計算每個標籤的鏈接帖子數量。

在你當前的設置中,這是不可能的,你將不得不分析每個字段並保持一個計數。

這樣的計算很容易。創建一個數組,並加1爲每個標籤每次你找到它:

$tags = array(); 
// Loop trough all records: 
    // Split the tags 
    // For each tag: 
    $tags[$tag] = (array_key_exists($tag, $tags)?$tags[$tag] + 1: 1); 

這個循環後,您將有一個包含所有標籤的數組,它使用的次數。