Php标签显示

时间:2009-10-16 12:10:52

标签: php tags

有4个表用于存储标签:

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”)?如果我使用这种方式,那么我有点担心在大多数内容中会有重复的标签,而新的标签永远不会显示在主页面上。或者我应该使用两个查询,一个用于新标签,一个用于大多数用户?

谢谢, ILE

2 个答案:

答案 0 :(得分:2)

你可以将它们组合成一个表来混合起来(这样你就可以拥有两个世界中最好的一个)。

因此,如果您打算制作20个标签的标签云,请选择10个标签最多且10个随机标签。

如果Arkh提到的话,如果你有很多标签,那么ORDER BY RAND()会非常粗糙。或者,您可以使用随机整数插入每个标记,然后将该列编入索引。如果您想稍后将标签随机播放,可以将随机值重新分配给该列。

答案 1 :(得分:1)

您是否尝试使用ORDER BY RAND()? 它可能会扼杀你的性能,但是如果你将结果缓存5或10分钟,它应该足够好了。