2009-12-04 2 views
1

좋아요,이 스크립트는 특정 질문에 대해 더 많이 입력 된 태그와 덜 작게 입력 된 태그를 표시해야합니다. 그러나 어떤 이유에서 더 크게 입력 된 마지막 태그를 표시하고 카운트 다운중인 것처럼 작게 입력 된 모든 태그를 표시합니다. 이 문제를 해결해야합니다.PHP와 MySQL을 사용하여 MySQL 데이터베이스에 입력 한 횟수에 따라 텍스트를 더 크게 표시하는 방법은 무엇입니까?

내가이 권리를 설명했으면 좋겠습니까?

여기에 MySQL 테이블이 있습니다.

CREATE TABLE questions_tags (
id INT UNSIGNED NOT NULL AUTO_INCREMENT, 
tag_id INT UNSIGNED NOT NULL, 
users_questions_id INT UNSIGNED NOT NULL, 
PRIMARY KEY (id) 
); 

CREATE TABLE tags (
id INT UNSIGNED NOT NULL AUTO_INCREMENT, 
tag VARCHAR(255) NOT NULL, 
PRIMARY KEY (id) 
); 

여기 내 PHP 스크립트입니다.

<?php 

$db_host = "localhost"; 
$db_user = "root"; 
$db_pass = ""; 
$db_name = "sitename"; 

mysql_connect($db_host, $db_user, $db_pass) or die(mysql_error()); 
mysql_select_db($db_name); 

function tag_info() { 
$result = mysql_query("SELECT questions_tags.*, tags.* FROM questions_tags INNER JOIN tags ON tags.id = questions_tags.tag_id WHERE questions_tags.users_questions_id=3 ORDER BY users_questions_id DESC"); 
while($row = mysql_fetch_array($result)) { 
$arr[$row['tag']] = $row['id']; 
} 
ksort($arr); 
return $arr; 
} 

function tag_cloud() { 

$min_size = 10; 
$max_size = 30; 

$tags = tag_info(); 

$minimum_count = min(array_values($tags)); 
$maximum_count = max(array_values($tags)); 
$spread = $maximum_count - $minimum_count; 

if($spread == 0) { 
$spread = 1; 
} 

$cloud_html = ''; 
$cloud_tags = array(); 

foreach ($tags as $tag => $count) { 
$size = $min_size + ($count - $minimum_count) 
* ($max_size - $min_size)/$spread; 
$cloud_tags[] = '<a style="font-size: '. floor($size) . 'px' 
. '" class="tag_cloud" href="http://www.example.com/tags/' . $tag .'/' 
. '" title="\'' . $tag . '\' returned a count of ' . $count . '">' 
. htmlspecialchars(stripslashes($tag)) . '</a>'; 
} 
$cloud_html = join("\n", $cloud_tags) . "\n"; 
return $cloud_html; 

} 

?> 

<div id="wrapper"> 
<?php print tag_cloud(); ?> 
</div> 
+0

@myhut로 tagcount를 할당? @bmac의 답변이 도움이되었습니다. –

답변

0

아마도 문제는 WHERE 절에 하드 코드 된 ID입니까?

questions_tags.users_questions_id=3 
+0

질문 웹 페이지 ID를 호출하는 것이므로 나중에 동적 값으로 변경되므로 중요한 사항은 아닙니다. – myhut

+0

하나의 페이지에서이를 테스트하고 있습니다. – myhut

1

태그 ID를 배열의 값으로 입력하면 태그가 점차 작아지는 이유가 있습니다.

tag.id로 그룹화하고 개수를 실행하면 쿼리가 수정됩니다.

$result = mysql_query("SELECT tag, count(*) as tagcount, tags.id FROM tags, questions_tags WHERE questions_tags.tag_id = tags.id AND questions_tags.users_questions_id=3 GROUP BY tags.id"); 

당신은 당신이 아직 문제가 해결 되었습니까 배열 값

while($row = mysql_fetch_array($result)) { 
$arr[$row['tag']] = $row['tagcount']; 
} 
관련 문제