(PHP) MySQL に hatena というテーブルがあります。そこに words2 というカラムがあり、このカラムには hatena goo google のように単語が半角のスペースで区切れれて格納されています。


質問はその単語の数を数え、例えば hatena という単語が10ヶ以上ある場合には赤色でhatenaを表示し、7ヶ以上であれば青、5ヶ以上であれば黒で表示させるソースをお願いします。

*Pearなどのライブラリなどは使用せずPHPのみで稼動するようなものをよろしくお願いします。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2006/02/23 15:11:52
  • 終了:--

回答(1件)

id:bonlife No.1

回答回数421ベストアンサー獲得回数752006/02/23 23:36:01

ポイント40pt

http://jp.php.net/mysql_fetch_array

PHP: mysql_fetch_array - Manual

テーブルのレコードについてどう考えるのかが分かりませんでしたので、とりあえず、全レコードのwords2カラムの値に含まれる数をカウントする仕様で書いてみました。

出力についてもイメージが湧かなかったので、words2カラムにhatenaが10個あればhatenaを1個赤色で表示する、としております。

もっと上手いやり方もあるかと思いますが、参考になると幸いです。


<?php

// 出力設定

mb_http_output(’UTF-8’);

header(”Content-Type: text/html; charset=UTF-8”);

print <<<EOF

<!DOCTYPE HTML PUBLIC ”-//W3C//DTD HTML 4.01 Transitional//EN”>

<html>

<head>

<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8”>

<title>MySQLテスト</title>

</head>

<body>


EOF;

// MySQLに接続 (サーバ名、ユーザーID、パスワードは適宜変更)

$link = mysql_connect(”server_name”, ”user”, ”password”)

or die(”エラーメッセージを書いたりする”);

// データベースを選択 (例では test を選択)

mysql_select_db(’test’);

// SQLで問合せ

// 必要に応じてwhere句を指定するなど適宜修正

// 今回の例では select words2 from hatena; の方がベターだが

// サンプルでは汎用性を持たせるために * で全カラム取得

$sql = ”select * from hatena;”;

$result = mysql_query($sql);

mysql_close($link);


// SQLの結果を配列として取得

// words2カラムの値を配列 $words2[] にセット

while ($row = mysql_fetch_array($result)) {

$words2[] .= $row[’words2’];

}

// 配列 $words2[] の内容を $words2_merge にマージ

// $words2_merge を半角スペースで分割

// 別の配列 $keywords にセット

for ($i=0;$i<count($words2);$i++) {

$words2_merge .= ’ ’ . $words2[$i];

}

$keywords = preg_split(’/ /’,$words2_merge,-1,PREG_SPLIT_NO_EMPTY);

// 配列 $keywords からユニークなものを抜き出し

// 配列 $keywords_unique を作成

$keywords_unique = array_unique($keywords);

// 配列 $keywords_unique のそれぞれの値が

// 配列 $keywords に何個含まれるのかをカウント

// 配列 $count_words に保存

for ($i=0;$i<count($keywords_unique);$i++) {

$j = 0;

for ($j=0;$j<count($keywords);$j++) {

if ($keywords_unique[$i] == $keywords[$j]) {

$count_words[$i] += 1;

}

}

}

// 表示処理

for ($i=0;$i<count($keywords_unique);$i++) {

if ($count_words[$i]>10) {

// 10個以上で赤色表示

print ”¥t” . ’<span style=”color:#FF0000”>’ . $keywords_unique[$i] . ”</span><br />¥n”;

} else if ($count_words[$i]>7) {

// 7個以上で青色表示

print ”¥t” . ’<span style=”color:#0000FF”>’ . $keywords_unique[$i] . ”</span><br />¥n”;

} else if ($count_words[$i]>5) {

// 5個以上で黒色表示

print ”¥t” . ’<span style=”color:#000000”>’ . $keywords_unique[$i] . ”</span><br />¥n”;

}

// 5個に満たない場合は表示しない?

}

print <<<EOF

</body>

</html>

EOF;

?>


(DBとPHPの文字コードが異なる場合のマルチバイト項目については考慮できてませんので、必要であればmb_convert_encodingなどを使ってみてください。)

http://jp.php.net/preg-split

PHP: preg_split - Manual

id:esecua

Thankx a lot.

2006/02/24 16:13:53

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません