人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

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

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

●質問者: esecua
●カテゴリ:ビジネス・経営 コンピュータ
✍キーワード:goo Google Hatena MySQL Pear
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ●
●40ポイント

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

◎質問者からの返答

Thankx a lot.

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ