行いたいことはPHPで全てのレコードから単語の数をかぞえて、例えば同じ単語が20個以上なら赤色で表示し、15個以上なら黄色、5個以下なら表示しないといった感じにするにはどうしたらいいのでしょうか?
簡単なソースお願いいたします。
$sql = ”select field from table”;
$res = mysql_query($sql);
$words = array();
while($row = mysql_query($res)){
foreach(explode(’ ’,$row[field]) as $field){
$words[$field] = 1;
}
}
foreach($words as $field => $dummy){
$sql = ”
select count(*) as cnt from table
where field regexp ’(^| )” . mysql_escape_string(preg_quote($field)) . ”( |$)’”;
$res = mysql_query($sql);
list($row) = mysql_fetch_row($res);
$words[$field] = $row[cnt];
}
foreach($words as $field => $cnt){
if($cnt >= 20){
echo ’<font color=”red”>’.htmlspecialchars($field).’</font>
’;
}else if($cnt >= 15){
echo ’<font color=”yellow”>’.htmlspecialchars($field).’</font>
’;
}else if($cnt > 5){
echo htmlspecialchars($field).’
’;
}
}
mysqlの場合こんな感じです。
http://www.mitene.or.jp/~rnk/TIPS_ORCL_FUNC3.htm
Oracle SQL Func3
//とりあえずすべての単語を配列に格納
$sql = ”SELECT DISTINCT hoge FROM table”; //テーブル名table、単語の入っているカラム名hogeとする
$rtn = $db->query($sql); //PEAR DB例
$item_list = array();
while($row = $rtn->fetchRow()){
$list = explode(’ ’, $row[’hoge’]);
foreach($list as $line){
$item_list[$line] = $line;
}
}
//すべての単語についてcount()で個数を数える
foreach($item_list as $item){
$sql = ”SELECT COUNT(*) FROM table WHERE hoge~’{$item}’”;
$cnt = $db->getOne($sql);
if($cnt >= 20){
echo ’<div style=”color:red;”>’.$item.’</div>’;
}elseif($cnt >= 15){
echo ’<div style=”color:yellow;”>’.$item.’</div>’;
}elseif($cnt > 5){
echo ’<div>’.$item.’</div>’;
}else{
//表示しない
}
}
質問するときはサンプルとなるテーブルやカラム名を書いてもらう方がいいんですけどねぇ。今後ご検討ください。その方があなたも勉強になると思います
回答ありがとうございます。
ありがとうございました。実際に試してポイント数を決めていきたいと思います。