2015-12-12 75 views
1

我有几个静态标签在表中。更改热门标签的字体大小

我试图跟踪静态标签上的点击,并且我在其他网站上看到(其实很好),流行标签更改的是大小。

看一看这张图片: enter image description here 这张图片显示了预期的输出。

表看起来是这样的:

+-----------+--------+ 
| tag | clicks | 
+-----------+--------+ 
| Falun  | 45  | 
| Stockholm | 229 | 
| Borlänge | 77  | 
| ...  | ... | 
| ...  | ... | 
+-----------+--------+ 

更多的点击, “做大” 的字体大小。但字体大小应该是最大40px,最小5px。

我如何从MySQL和PHP计算点击差异并将其呈现在font-size

SELECT tag, (SELECT COUNT(percentage) FROM tags) AS tag_size FROM tags

然后

foreach($tags as $tag){ 
    <a href="#" style="font-size: <?php echo $tag->tag_size ?>px"><?php echo $tag->tag ?></a> 
} 

伪代码非常抱歉,但我不知道如何做到这一点!

+0

什么是数据库结构?什么是“百分比”? – chris85

+0

对于伪代码,我很抱歉,百分比应该代表“字体大小”。表格结构是'tag'和'clicks' – Adam

+0

那么你在计算什么? 'SELECT COUNT(percentage)FROM tags' – chris85

回答

0

因此,您可以使用group by将所有标记记录拉到一起。然后你可以使用if来设置你的字体大小。喜欢的东西:

$sql = 'SELECT tag, count(clicks) AS tag_size FROM tags group by tag'; 
$sth = $dbh->prepare($sql); 
$sth->execute(); 
$result = $sth->fetchAll(); 
foreach($result as $row) { 
    $size = $row['tag_size']; 
    if($size >700){ 
     $font_size = 40; 
    } elseif($size >650){ 
     $font_size = 39; 
    } elseif($size >650){ 
     $font_size = 38; 
    }... 
    else { 
     $font_size = 5; 
} 
+0

随着点击数增加,这将失败。很快,即使是最不受欢迎的标签也可能有700多次点击。我感觉OP希望相对标签点击的百分比而不是任意数字。IE最受欢迎的标签是100%。这样,每个标签可以呈现为40px(最大字体大小)的x百分比。 – Moob

+0

如果只有2个标签,而其中一个具有'1'点击,另一个具有'1000',我认为'1000'应该是40px,并且'1'点击5像素,因为它非常不受欢迎。取决于OP的意图,尽管;我会等待更新。 – chris85

1

首先,你需要找到的点击数量上限:

SELECT MAX(`clicks`) FROM `tags`; 

让我们假设这个被分配到一个名为$max_clicks变量。然后您需要根据此值缩放磅值。你所使用的这个公式是完全取决于你,但比例根据平方根的点击次数应产生合理的结果:

if ($max_clicks > 0) { // Avoid divide-by-zero error if nothing has been clicked 
    $sqrt_max_clicks = sqrt($max_clicks); 
    $query = "SELECT `tag`, 5 + 35 * SQRT(`clicks`)/$sqrt_max_clicks FROM `tags`;" 
    // ... (Generate tag markup) ... 
} 

显然,5是最小磅,并且35的区别在最大点和最小点之间。我假设您希望标签出现在标签列表中,即使它们的点击次数为零。