2009-10-16 89 views
0

有用於存儲標籤4個表:PHP標籤顯示

tagovi, tagovi_vijesti, tagovi_blogovi, tagovi_dogadjanja 

結構OD表tagovi

id - name 

tagovi_vijesti的結構:

id - vijesti_id - tag_id 

這同樣適用於另外兩張桌子。

在主界面顯示我從所有三個表這樣的標籤:

$sql = "SELECT 
      T.id AS id, T.name AS tag, 
      TV.id AS tag_vijest_id, TD.id AS tag_dogadjanje_id, TB.id AS tag_blog_id, 
      COUNT(*) ponavljanje 
      FROM tagovi AS T 
      LEFT JOIN tagovi_vijesti AS TV ON T.id = TV.tag_id 
      LEFT JOIN tagovi_dogadjanja AS TD ON T.id = TD.tag_id 
      LEFT JOIN tagovi_blogovi AS TB ON T.id = TB.tag_id 
      WHERE TV.id IS NOT NULL 
      GROUP BY id 
      ORDER BY id DESC 
      LIMIT 35"; 
    $sql_result = mysql_query($sql,$connect) 
     or die("Upit nije izvrsen"); 

    while ($row = mysql_fetch_array($sql_result)){ 
     $tag_id = $row["id"]; 
     $tag_url = $row["tag"]; 
     $tag = preg_replace('/-/', ' ', $tag_url); 
     $tag_ponavljanje = $row["ponavljanje"]; 

     if($tag_ponavljanje >= 10 && $tag_ponavljanje < 20) $fontSize = "14px"; 
     elseif($tag_ponavljanje >= 20 && $tag_ponavljanje < 30) $fontSize = "16px"; 
     elseif($tag_ponavljanje >= 30 && $tag_ponavljanje < 40) $fontSize = "18px"; 
     elseif($tag_ponavljanje >= 40 && $tag_ponavljanje < 60) $fontSize = "20px"; 
     elseif($tag_ponavljanje >= 60) $fontSize = "24px"; 
     else $fontSize = "12px"; 

     echo " &nbsp; <a href = \"$ispisi_link/tag/$tag_url\" style=\"font-size: $fontSize;\">$tag</a> &nbsp; "; 
    } 

但我不認爲這是做它的最佳方式,因爲標籤是由ID排序,那麼所有這些舊標籤將不會再顯示,因爲結果是按ID排序的。你使用什麼樣的顯示(查詢)?你會建議我如何顯示標籤?按照每個標籤的重複次數來排序它們會更好嗎(在我的表格中,重複稱爲「ponavljanje」)?如果我使用這種方式,那麼我有點擔心會有大部分內容會被重複使用的標籤,並且新主題將永遠不會顯示在主頁上。或者我應該使用兩個查詢,一個用於新標籤,另一個用於大多數用戶?

感謝, 島

+2

我認爲這個例子說明了爲什麼只有英文變量的名字纔是首選。 :-P – Tomalak

+2

我認爲不難得出'tagovi'或'blogovi'是什麼意思:P:D –

+0

@ile +1,但tagovi_vijesti有點難於挖掘 –

回答

1

你嘗試使用ORDER BY RAND()? 它可能會殺死你的perfs,但如果你緩存5或10分鐘的結果,它應該足夠好。

+0

嗯,我不知道ORDER By RAND()對於性能非常糟糕,我使用它從照片庫中列出的圖像,也許我應該學習和使用緩存。 –

2

你可以把它們混合成一張表(這樣你就擁有了兩全其美)。

因此,如果您打算做20個標籤的標籤雲,請選擇10個標籤最多和10個隨機標籤。

ORDER BY RAND()如果你有很多標籤,但是正如Arkh提到的那樣,它將會非常粗糙。或者,您可以插入每個標籤隨機整數,然後讓該列索引。如果您稍後想要對標籤進行隨機播放,則可以將隨機值重新分配給該列。

+0

是否有其他(更簡單)的方式來選擇10個最標記,然後選擇10個隨機標籤,除了10個標籤之外,我會使用: 存儲10個標籤最多的數組,然後在sql查詢中用「WHILE foreach $ id爲$ id)id!='$ id'「(這只是爲了解釋語義,我知道語法是錯誤的:)) 也許我可以添加甚至10個最新的標籤,所以這將是總共od標籤...我認爲這將是好的解決方案。 感謝您的幫助;) –