有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 " <a href = \"$ispisi_link/tag/$tag_url\" style=\"font-size: $fontSize;\">$tag</a> ";
}
但我不认为这是完美的方式,因为标签按id排序,然后所有那些旧标签将永远不再显示,因为结果按id排序。你使用什么样的显示(查询)?你有什么建议我显示标签?最好按每个标签的重复次数对它们进行排序(在我的表中重复称为“ponavljanje”)?如果我使用这种方式,那么我有点担心在大多数内容中会有重复的标签,而新的标签永远不会显示在主页面上。或者我应该使用两个查询,一个用于新标签,一个用于大多数用户?
谢谢, ILE
答案 0 :(得分:2)
你可以将它们组合成一个表来混合起来(这样你就可以拥有两个世界中最好的一个)。
因此,如果您打算制作20个标签的标签云,请选择10个标签最多且10个随机标签。
如果Arkh提到的话,如果你有很多标签,那么ORDER BY RAND()会非常粗糙。或者,您可以使用随机整数插入每个标记,然后将该列编入索引。如果您想稍后将标签随机播放,可以将随机值重新分配给该列。答案 1 :(得分:1)
您是否尝试使用ORDER BY RAND()? 它可能会扼杀你的性能,但是如果你将结果缓存5或10分钟,它应该足够好了。