ここで user が hatena という値があるレコードすべてを取得し word に入っている値を ' ではさみ単語ごとを,で区切り最後は,をつけない形 (例 'itmedia','atmarkit','cnet','yahoo' のような感じ)にするPHPソースをお願いします。ちなみに同じ単語は重複しないようにしてください。
id:Sampoさんの例ではdistinct wordとしてしまっているので、$rows["word"]では取得できないのだと思います。
mysql_fetch_assocをmysql_fetch_arrayなどに変更し、$rows[1]に変更するか、distinct wordに別名を付与すれば正しく動作します。
以下のような感じでいかがでしょうか。
<?php // HTML出力用設定 mb_http_output('UTF-8'); header("Content-Type: text/html; charset=UTF-8"); // HTMLのヘッダー部分出力 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 userがhatenaの行のwordを列挙</title> </head> <body> EOF; // MySQLに接続 (サーバ名、ユーザーID、パスワードは適宜変更) $con = mysql_connect("localhost","user","password") or die("MySQLに接続できません。"); // データベースを選択 (例では test を選択) mysql_select_db('test'); $sql = "SET CHARACTER SET UTF8"; $result = mysql_query($sql); // SQL(SELECT文)設定 $sql = "SELECT distinct WORD AS WORD_UNIQUE FROM hogeter WHERE user = 'hatena'"; $result = mysql_query($sql); // 以下表示処理 if (!$result) { // 検索結果が存在しない場合 print "検索結果を取得できませんでした。"; } else { // 検索結果が存在する場合 while($row=mysql_fetch_array($result)){ $words_quoted[] = "'" . $row['WORD_UNIQUE'] . "'"; } // 検索結果が1件より少ない場合 if (count($words_quoted)<1) { print "検索結果がありませんでした。"; } else { // 検索結果が1件以上ある場合 $output = implode(",",$words_quoted); print $output; } } // HTMLのフッター部分出力 print <<<EOF </body> </html> EOF; ?>
質問文中の「user が hatena という値がある」は「userがhatenaという値である」と解釈しました。
hatenaという文字列を含むuserを選択したいのであれば、where句の条件を user like '%hatena%' とすれば良いです。
また、wordに入っている値が1語でない場合も想定するのであれば、「検索結果が存在する場合」の部分の処理を以下のように変更してみてください。
// 検索結果が存在する場合 $words_quoted = array(); while($row=mysql_fetch_array($result)){ $word_unique = explode(" ",$row['WORD_UNIQUE']); $words_quoted = array_merge($words_quoted, $word_unique); } for ($i=0;$i<count($words_quoted);$i++){ $words_quoted[$i] = "'" . $words_quoted[$i] . "'"; }
補足になりますが、Yahoo、yahoo、YAHOOを同じ単語として認識させるためには、SQL文の部分を以下のどちらかに変更すれば良いです。
$sql = "SELECT distinct lower(WORD) AS WORD_UNIQUE FROM hogeter WHERE user = 'hatena'";
$sql = "SELECT distinct UPPER(WORD) AS WORD_UNIQUE FROM hogeter WHERE user = 'hatena'";
参考になれば幸いです。
$query = mysql_query("select distinct word from hogeter where user='hatena'");
while( $rows = mysql_fetch_assoc($query) ) $apos[] = "'".$rows["word"]."'";
$result = implode(",", $apos );
うまく動かなかったらご指摘ください。
id:Sampoさんの例ではdistinct wordとしてしまっているので、$rows["word"]では取得できないのだと思います。
mysql_fetch_assocをmysql_fetch_arrayなどに変更し、$rows[1]に変更するか、distinct wordに別名を付与すれば正しく動作します。
以下のような感じでいかがでしょうか。
<?php // HTML出力用設定 mb_http_output('UTF-8'); header("Content-Type: text/html; charset=UTF-8"); // HTMLのヘッダー部分出力 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 userがhatenaの行のwordを列挙</title> </head> <body> EOF; // MySQLに接続 (サーバ名、ユーザーID、パスワードは適宜変更) $con = mysql_connect("localhost","user","password") or die("MySQLに接続できません。"); // データベースを選択 (例では test を選択) mysql_select_db('test'); $sql = "SET CHARACTER SET UTF8"; $result = mysql_query($sql); // SQL(SELECT文)設定 $sql = "SELECT distinct WORD AS WORD_UNIQUE FROM hogeter WHERE user = 'hatena'"; $result = mysql_query($sql); // 以下表示処理 if (!$result) { // 検索結果が存在しない場合 print "検索結果を取得できませんでした。"; } else { // 検索結果が存在する場合 while($row=mysql_fetch_array($result)){ $words_quoted[] = "'" . $row['WORD_UNIQUE'] . "'"; } // 検索結果が1件より少ない場合 if (count($words_quoted)<1) { print "検索結果がありませんでした。"; } else { // 検索結果が1件以上ある場合 $output = implode(",",$words_quoted); print $output; } } // HTMLのフッター部分出力 print <<<EOF </body> </html> EOF; ?>
質問文中の「user が hatena という値がある」は「userがhatenaという値である」と解釈しました。
hatenaという文字列を含むuserを選択したいのであれば、where句の条件を user like '%hatena%' とすれば良いです。
また、wordに入っている値が1語でない場合も想定するのであれば、「検索結果が存在する場合」の部分の処理を以下のように変更してみてください。
// 検索結果が存在する場合 $words_quoted = array(); while($row=mysql_fetch_array($result)){ $word_unique = explode(" ",$row['WORD_UNIQUE']); $words_quoted = array_merge($words_quoted, $word_unique); } for ($i=0;$i<count($words_quoted);$i++){ $words_quoted[$i] = "'" . $words_quoted[$i] . "'"; }
補足になりますが、Yahoo、yahoo、YAHOOを同じ単語として認識させるためには、SQL文の部分を以下のどちらかに変更すれば良いです。
$sql = "SELECT distinct lower(WORD) AS WORD_UNIQUE FROM hogeter WHERE user = 'hatena'";
$sql = "SELECT distinct UPPER(WORD) AS WORD_UNIQUE FROM hogeter WHERE user = 'hatena'";
参考になれば幸いです。
動かないですね。。。
最後までしっかりとしたソースお願いします。