キーワードを1つにまとめる方法

このQ&Aのポイント
  • キーワードを1つにまとめる方法を紹介します。
  • 複数のキーワードを半角スペースで区切ることでまとめることができます。
  • MYSQL5.1かMS ACCESS2003を使用することで、簡単にキーワードをまとめることができます。
回答を見る
  • ベストアンサー

キーワードを1つにまとめたいです

キーワードを1つにまとめたいです こんにちは。下記のようなIDに対し、複数のキーワードが登録されています。 TABLE1 フィールド、ID、KW ID,KW 001,ice 001,cold 001,tastegood 002,book 002,google 003,analytics 003,excite 003,yahoo 003,sql といったようにデータが登録されています。 これだと見にくいのでクエリで下記のように整形したいと思います。 001 ice cold tastegood 002 book google 003 analytics excite yahoo sql 半角スペースで区切りたいと思います。MYSQL5.1かMS ACCESS2003で やれればと思っています。よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

MySQLであれば、独自機能のGROUP_CONCAT関数で実装できると思います。

参考URL:
http://dev.mysql.com/doc/refman/5.1/ja/group-by-functions.html
mellow91
質問者

お礼

うわ!!この関数凄いです!!知りませんでした!ご回答ありがとうございます!!

その他の回答 (1)

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.1

以下、Accessでの方法です。 クエリで表示するならば、 http://www.f3.dion.ne.jp/~element/msaccess/AcTipsVbaDJoin.html テーブルに直接取り込むならば、 http://oshiete1.watch.impress.co.jp/qa6628827.html の書き直しで、 TABLE1と同じ構造のTABLE2を設定し、 TABLE2: ID KW 以下のコードを標準モジュールに保存し、 ボタンクリックで呼び出すか、あるいは ボタンクリックの中にプロシージャの 中身をコピーして実行してもいいです。 なお、DAOを使っているので、コード表のツールから 参照設定を選択して、 Microsoft DAO xx Object Library にチェックを入れて、OKとします。xxは3.6のような数字です。 Sub test() Dim db As Database Dim rs1 As Recordset Dim rs2 As Recordset Dim rs3 As Recordset Dim strSQL As String Dim myStr1 As String Dim myStr2 As String strSQL = "SELECT TABLE1.ID FROM TABLE1 GROUP BY TABLE1.ID;" Set db = CurrentDb Set rs1 = db.OpenRecordset("TABLE1") Set rs2 = db.OpenRecordset("TABLE2", dbOpenDynaset) Set rs3 = db.OpenRecordset(strSQL) If rs3.RecordCount > 0 Then rs3.MoveFirst Do Until rs3.EOF If rs1.RecordCount > 0 Then rs1.MoveFirst Do Until rs1.EOF If rs3!ID = rs1!ID Then myStr1 = rs1!ID myStr2 = myStr2 & " " & rs1!KW End If rs1.MoveNext Loop rs3.MoveNext End If rs2.AddNew rs2!ID = myStr1 rs2!KW = myStr2 rs2.Update myStr1 = "" myStr2 = "" Loop End If rs1.Close: Set rs1 = Nothing rs2.Close: Set rs2 = Nothing rs3.Close: Set rs3 = Nothing db.Close: Set db = Nothing End Sub

mellow91
質問者

お礼

コードまで書いていただいてありがとうございます!なるほど、これならできそうですね!ご回答ありあとうございました!!ちなみに今回はmysqlのgroup_concat関数を使おうと思います。でも、勉強になります、助かりました!

関連するQ&A

  • ホームページ キーワード検索

    ホームページをキーワードで検索出来るように 一発太郎というサイトで登録しました。 でもいつまでたってもgoo infoseek, google、excite などで検索キーワードを入力しても ヒットするようになりません。 キーワードヒットできるように なる方法を教えてください。 お願いします。

  • 検索キーワード

    ホームページを作ったのですが、yahooやgoogleで検索キーワードを入力してもヒットしません。 それぞれ何か登録しないとヒットしないのでしょうか?

  • PDOを使って複数キーワード検索する方法について

    PDOでプリペアードステートメントを使って複数キーワードで検索する方法を教えて下さい。 プリペアードステートメントは「?」形式ではなく、$stmt->bindParam(':sample', $samle);の形を使った方法を知りたいです。 環境 PHP:5.1.6 MySQL:5.0.77 処理の流れを作ってみました。途中から不明な点があるので変数化しないで記載してあります。 /*--PDOのプリペアードステートメントのbindParamを用いた場合--*/ $dbh = new PDO($DSN , $DBUSER , $DBPASS); $query = 'SELECT * FROM table WHERE '; $keyword_str = 'キーワードA キーワードB キーワードC'; //全角スペースを半角スペースに変換する処理(省略) $keywords = split(' ',$keyword_str); for($a = 0; $a <$keywords_num; $a++) { $kw[]=' 列名 like :kw'.$a; } $query.= join('AND', $kw); //キーワードごとに「%キーワード%」の形を作る。 $kw0='%'.$keywords[0].'%'; $kw1='%'.$keywords[1].'%'; $kw2='%'.$keywords[2].'%'; $stmt = $dbh->prepare($query); $stmt->bindParam(':kw0', $kw0); $stmt->bindParam(':kw1', $kw1); $stmt->bindParam(':kw2', $kw2); $stmt->execute(); /*-----------------------------------------------------------*/ 上記ソースの後半部分、 (1) //キーワードごとに「%キーワード%」の形を作る。 のところを変数を使って実現しようと思うのですが、うまくいきません。 $keywords_num=count($keywords); でキーワードの数を取得して for($a = 0; $a <=$keywords_num; $a++) { //作りたいソース } の形にすることは予想がつくのですが。 (2) $stmt->bindParam(':kw0', $kw0); $stmt->bindParam(':kw1', $kw1); $stmt->bindParam(':kw2', $kw2); の部分も上記と同じ形を考えていますが $keywords_num=count($keywords); でキーワードの数を取得して for($a = 0; $a <=$keywords_num; $a++) { //作りたいソース } 「//作りたいソース」の部分がうまく作れません。 (1)(2)の作りたいソース部分の書き方を教えて下さい。 上記の考え方より良い(短い)ソースが作れる場合はそのソースを教えて下さい。

    • ベストアンサー
    • PHP
  • トランザクションについて教えてください

    PHPとMysqlを利用しています。MySQL4.1.18です。 同じテーブルに2つ以上の値をINSERTする場合、 1つでもエラーがあればロールバックさせるということはできますでしょうか。 あらかじめ「id=1」の値を登録しておき、この場合1つめがエラーになるので 2つめも実行されないでほしいのですが、実行されてしまいます。 テーブルのタイプはInnoDBにしています。 どうぞよろしくお願いします。 以下を参考に作成しました。 http://oshiete.nikkeibp.co.jp/qa3065237.html $sql = "begin"; $rst = mysql_query($sql, $con); //1つめ $sql= "INSERT INTO T_test(id,name)values('1','山田')"; $rst = mysql_query($sql, $con); if(!$rst){$err="err";} //2つめ $sql= "INSERT INTO T_test(id,name)values('2','鈴木')"; $rst = mysql_query($sql, $con); if(!$rst){$err="err";} $sql = "commit"; $rst = mysql_query($sql, $con); if($err){ $sql = "rollback"; $rst = mysql_query($sql, $con); }

    • ベストアンサー
    • MySQL
  • checkbokとキーワード検索を組み合わせた検索

    PHP4とMySQL4.0.22を使っています。 チェックボックスとキーワードで検索結果を表示させたいと思い。 下記のようにプログラムを作成したのですが、うまく検索表示してくれません。 PHPもMySQLも初心者なため、あちこちの構文を寄せ集めたため、Parseもうまく通っていません。 どこをどういう風にすればうまくいくのか、教えていただけないでしょうか? よろしくお願いします。 ----------------------------以下PHPファイル----------- 検索フォーム 検索キーワード:<input type=text name=\"k\"value='$k' size=45 > チェックボックス <INPUT TYPE=\"CHECKBOX\" NAME=\"bumon[]\" value=\"01:河川・砂防及び海岸\">01:河川・砂防及び海岸 ・・ "; //データ検索結果の実行部分 if($sig=="kb"){ $wk ==""; if($wk<>""){ //チェックボックス $sql = "select * from tecris where"; $sql .= " ("; $i=0; foreach($_POST['bumon'] as $fr) { if ($i) { $sql .= " or "; } $sql .= "bumon = '$fr'; $i++; } $sql .= ") and "; //キーワード if($k<>""){ $xk = str_replace(" "," ",$k); $gk = explode(" ",$xk); $wk ="keyword like '%$gk[0]%'"; $i = 1; $n = count($gk) - 1; while ($i <= $n){ $wk = $wk . " and keyword like '%$gk[$i]%'"; $i++; } } //クエリの作成 $sql = $sql . $wk; };

    • 締切済み
    • PHP
  • 検索クエリ

    Google Analyticsとウェブマスターツールの違いが良くわからないのですが 例えば検索クエリについての説明が http://lblevery.com/sfn/attract/wmt/search-query/ にあるのですが、 >Google Analyticsなどのアクセス解析は、 実際に訪問した人が「どんなキーワードで検索をしたのか?」という事を知るた ウェブマスターツールは「どんなキーワードで検索結果に表示されたのか?」が との事ですが、 「どんなキーワードで検索をしたのか?」 と 「どんなキーワードで検索結果に表示されたのか?」 は、そんなに違うものなのでしょうか? 結果としては一緒になる気がするのですが。

    • ベストアンサー
    • SEO
  • プリペアードステートメントへの変更

    PHP、MySQL初級者です。 ある商品を検索するサイトを運営していますが、SQLインジェクション対策がなされておらず、mysql_queryで書いていたものを、プリペアドステートメントに初挑戦しています。 元々作ったプログラムを、ネットの情報や本を参考に修正していますが、検索をすると画面が真っ白になってしまう現象から2日間抜け出せずにいます。 どなたかご教授いただけますでしょうか。PHPのバージョンは5.2、Windows環境です。 ちなみに、$display_fromはページネーションに関係するものです。 また、//でコメントアウトしている箇所は一旦PEAR::DBをつかうやりかたに修正したなごりです。 また、rs2のところは検索結果のヒット数を表示させるためにわざわざ全件を取得しています。(このやり方自体スマートではない感じがしていますが。。) /*POSTでkeywordを取得*/ if($_POST['keyword']!=""){ $keyword=$_POST['keyword']; } elseif($_GET['pageID']!=""){ $keyword=$_SESSION['keyword']; } else{ } //ログイン情報をインクルードする include('db_login.php'); //PEAR DBの機能が含まれるDB.phpもインクルードする require_once("DB.php"); //接続する $connection = DB::connect("mysql://$db_username:$db_password@$db_host/$db_database"); if(DB::isError($connection)){ die("Could not connect to the database: <br />".DB::errorMessage($connection)); } //$db = mysql_connect("localhost", "root", "root")or die ('DB Connection Error= '. mysql_error()); //mysql_select_db("book_db", $db)or die ('DB Connection Error= '.mysql_error()); //$rs = mysql_query("SET character set UTF8", $db); //$rs2 = mysql_query("SET character set UTF8", $db); /*keywordが空白だった場合*/ if($keyword==""){ $query="SET character set UTF8"; $rs=$connection->query($query); $query="select * from book_card order by point desc limit $display_from, 50"; $rs=$connection->query($query); if(DB::isError($rs)){ die("Could not query the database:<br />$query ".DB::errorMessage($rs)); } $query2="SET character set UTF8"; $rs2=$connection->query($query2); $query2="select * from book_card"; $rs2=$connection->query($query2); if(DB::isError($rs2)){ die("Could not query the database:<br />$query2 ".DB::errorMessage($rs2)); } /*もともとのコード $rs=mysql_query("select * from book_card order by point desc limit $display_from, 50", $db); $rs2=mysql_query("select * from book_card", $db); */ } /*keywordに何か入っていた場合*/ else{ $query="SET character set UTF8"; $rs=$connection->query($query); //$query="select * from book_card where Name like '%$keyword%' order by point desc limit $display_from, 50"; //$rs=$connection->query($query); $query = "select * from book_card where Name like ? order by point desc limit ?, 50"; $rs = $connection->prepare($query); $data = array("%$keyword%", $display_from); $connection->execute($rs, $data); $query2="SET character set UTF8"; $rs2=$connection->query($query2); //$query2="select * from book_card where Name like '%$keyword%'"; //$rs2=$connection->query($query2); $query2 = "select * from book_card where Name like ?"; $rs2 = $connection->prepare($query2); $data2 = "%$keyword%"; $connection->execute($rs2, $data2); /*もともとのコード $rs=mysql_query("select * from book_card where Name like '%$keyword%' order by point desc limit $display_from, 50", $db); rs2=mysql_query("select * from book_card where Name like '%$keyword%'", $db); */ } 分かりにくい質問ですみませんが、どなたかお分かりの方ご教授いただけますでしょうか。 何卒宜しくお願い致します。

    • ベストアンサー
    • PHP
  • キーワード検索率UPの方法って

    検索エンジン上での検索率UPの方法について教えて下さい。 下記対応を3ヶ月くらい前にとってみたのですが、全く効果がありませんでした。 (1)自社HPのメタにキーワードを登録。 ⇒上記に登録した場合、excite、goo、infoseekで登録キーワードを検索すると 登録後しばらく(1ヶ月程度)してからヒットするとのことでしたが・・・ (2)YAHOO 企業間取引 (BtoB) のサイトの推薦で申請。 (※YAHOO側での審査に1ヶ月程度の期間が必要になるとのこと) ⇒申請が通れば、登録キーワードで検索した場合にヒットするはず・・・ 結局自社HPの検索回数自体を増やさないとヒットしないんでしょうか? 検索率が上がるHP作成会社なんかもあるそうですが、作り方で変わるんでしょうか? 何かご存知でしたらお願い致します。

  • PHP+MySQLでデータ登録がうまくいかない

    いつもお世話になっています。 早速質問です。 ユーザ登録フォームの作成をしています。 Select文を使って2重登録の確認後、DBに登録するのですが 2重登録はちゃんと機能しているのに、登録が出来ません。 どのようにしたらいいか、アドバイスいただけますか? お手数ですが、よろしくお願いします。 mysql_query("lock tables user_data write"); $sql = "select USER from user_data where USER = '" . $_POST["USER"] . "'"; $res = mysql_query($sql); if (mysql_num_rows($res) > 0) { echo "すでに登録済みです。"; mysql_query("unlock tables"); mysql_close($con); exit; } $sql = "insert into user_data(USER, pass) values ('" . $_POST["USER"] . "','" . $_POST["pass"] . "');"; mysql_query($sql); mysql_query("unlock tables"); mysql_close($con);

    • ベストアンサー
    • MySQL
  • phpでのSQLでのデータの追加方法

    phpでのSQL実行に関して、下記のデータを追加するコードがあります。 mysql_query('INSERT INTO my_items SET maker_id=1, item_name="もも", price=210, keyword="缶詰,ピンク,甘い", sales=0, created="2010-08-01", modified="2010-08-01"') or die(mysql_error()); echo 'データを挿入しました'; 私は。それを INSERT INTO (フィールド名) VALUES(値) のSQL文で実行したいのですが、その方法が分かりません。 よろしければ、それを実行するコードを教えてください。お願いします。

    • ベストアンサー
    • PHP