• 締切済み

シリアライズされた値に対するカラムへの検索方法

PHPを使ってMysqlDBに入っている値を取得して表示する 表示面のプログラムを作成しております。 下記のようなシリアライズされた値が保管されている項目に対しての 検索条件の記述を現在はLikeを使っております。 FIND_IN_SETのような検索用の関数はございませんでしょうか。 ●検索対象 1269、1260、1254、84 ●シリアライズされた値サンプル a:4:{i:0;s:4:"1269";i:1;s:4:"1260";i:2;s:4:"1254";i:3;s:2:"84";} ●Likeの記述 カラム名 Like "%\"1260\"%" ご教授のほど、よろしくお願いします。

みんなの回答

  • mpro-gram
  • ベストアンサー率74% (170/228)
回答No.1

簡単なのはないです。強引に関数組み合わせで行ったとして、likeより速いとも思えないけど FIND_IN_SET( concat('s:',length( cast(:num as char)),':"',cast(:num as char),'"'), replace( ';', ',' , カラム名) )  :num をプレースホルダーとして検索値を代入  concat の部分は、先にphp で文字列作って、プレースホルダーで入れてしまうのもあり

toema
質問者

お礼

ご回答ありがとうございます。 参考にいたします。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 値が「1」のカラム名を求めたい。

    任意の列の、値が「1」のカラム名を求めるにはどうしたらいいでしょうか? PHP Version 5.1.6 MySQL - 5.0.45 で運用しています。 そもそものテーブルの作り方がおかしいのかも知れませんが、 以下のようになっています。 このテーブルで、IDが「40」の列の値が「1」のカラム名を求めたいのです。 どの様にしたらいいでしょうか? ※カラム名「会員番号110」は実際は整数になっています。 ID  会員番号110  会員番号111  会員番号112  会員番号113  40  1       1       0       1       41  0       1       1       1   $sql ="select * from `member_sub_tbl` where `ID`='$ID'"; $result = mysql_query($sql, $con); //カラムの数を取得する $numFields = mysql_num_fields($result); for($i=0;$i<$numFields;$i++){ $nameFields[] = mysql_field_name($result, $i); } print_r($nameFields); これで、カラム名は全て配列に入るのですが、値が「1」のと限定する方法がわかりません。 ご教授、よろしくお願いいたします。    

    • ベストアンサー
    • PHP
  • データベースクエリで任意の値を検索する方法について

    データベースクエリについて質問させて頂きます。 下記のようなクエリがあるとして、WHERE句で指定したフィールドを対象に検索処理を行いたいのですが、 その際、フォームに配置されたテキストボックスに任意に入力した値を検索値にしたいのです。 つまり、クエリ中の<変化する値>がそれに当たります。 例えば<変化する値>が任意でなく指定値であれば'%あ%'とした時、あを含むレコードが検索されると思うの ですが、前者はどのような記述をすれば良いのか分かりません。 こういった場合、どのように記述すればよいのかご教授願います。 SELECT Code, MainType, Name, Type1, Type2, Type3, Unit, UnitPrice, Used FROM shizai_master WHERE (Code LIKE '%<変化する値>%') OR (MainType LIKE '%<変化する値>%') OR (Name LIKE '%<変化する値>%') OR (Type1 LIKE '%<変化する値>%') OR (Type2 LIKE '%<変化する値>%') OR (Type3 LIKE '%<変化する値>%')

  • MYSQLで複数の値を検索して取得するには?

    お世話になります。 MYSQLとPHPを見よう見まねでやっている超初心者です。 $_POST['sample']はチェックボックスから取得してきたので複数の値があります。 その複数の値をwhere data = $where";にしてdataから複数の検索結果を取得したいと思っているのですが、下記のように書くと複数ある$_POST['sample']の一つしか検索取得できません。 $_POST['sample']の複数の値の検索結果を取得するにはどうすればよろしいのでしょうか? 基本的な事がわかっていない超初心者ですので できれば具体的な式を教えて頂ければ大変助かります。 ご教授よろしくお願い致します。 if (isset($_POST['sample'])) { for ($i = 0; $i < count($_POST['sample']); $i++) { $where ='' . h($_POST['sample'][$i]) . ''; } } function h($string) { return htmlspecialchars($string, ENT_QUOTES); } ///// $sql = "select * from test where data = $where"; $result = mysql_query( $sql );

    • ベストアンサー
    • PHP
  • PHP PDOを利用してカラムの削除は可能ですか

    現在、PHPでデータベースの値を利用するWEBアプリを作成しております。 一部のテーブルの値を削除するのに合わせて、 別テーブルの指定カラムを削除したいのですが、 PDOでは可能なのでしょうか。 例:テーブルAのレコード2を削除すると、 テーブルBのカラム2を削除するという流れです。 可能な場合は、サンプルサイトまたはサンプルコードを 教えてください。 不可能な場合は、PHPにて実装するためのサンプルサイトまたはサンプルコードを教えていただけませんでしょうか。 PHPのバージョンはPHP5.4でございます。 お手数ですが、ご教授いただけますと幸いでございます。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • PHP/MySQLであいまい検索を

    HP上のテキストボックスに文字を入力し、その値をPHPでMySQL上のデータベースよりあいまい検索をし 該当するデータを表示したいのですが、私の検索キーワードが悪いのか、いいサンプルソースが見つけられません。 MySQLのREGEXP関数を使ってあいまい検索を 行うサンプルは見つけたんですが、これは日本語対応では なく検索文字列によってはうまく検索できない場合が あると聞きました。 何かよいサンプルがあったらURLもしくは ソースをそのままで結構ですので貼り付けていただければ 助かります。 では、よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 大文字と小文字を区別しない検索にする方法

    勉強する間もなく手探りでフリーCGIの改造をさせて頂いています。 if ゃ foreach などは分かりやすいですが、変数の意味が良く理解できていません。 どうぞお力添えをお願い致します。 現在、フリーのCGIでデータ登録と検索をしていますが、大文字と小文字の 区別を無くしたものにするにはどうすればよいでしょうか? 1) AbcDe も abcde も同じにしたい。 2) 可能なら全角と半角も区別無しにしたい。   ただ、2の方は漢字も使うので難しいでしようか? iオプションを使えとの記述を見ましたが、どこを変えるのか解りません。 ソースを載せますので、ご指導宜しくお願い致します。 # 入力内容を整理 $in{'word'} =~ s/\x81\x40/ /g; @wd = split(/\s+/, $in{'word'}); @find=(); $i=0; # 検索処理 foreach (@line) { $flag = 0; foreach $wd (@wd) { if (index($_,$wd) >= 0) { $flag = 1; if ($in{'cond'} eq 'OR') { last; } } else { $andor="and 検索"; if ($in{'cond'} eq 'AND') { $flag=0; last; } $andor="or 検索"; } } # ヒットした場合 $view = $in{'viewc'}; if ( $view eq '' ) { $view = $views } if ($flag) { $i++; next if ($i < $page + 1); next if ($i > $page + $view); push(@find,$_); } } # 検索終了

    • ベストアンサー
    • CGI
  • テキストフォームの値を次のページのテキストフォームに入力しておくには?

    僕はphpでデータベース検索の実装をしてる者です。 具体的には、検索ページにテキストフォームがあります。そしてそのフォームに「リボン」といった任意の値を渡してlike検索をします。 ページが飛んだ後に、この場合フォームに「リボン」と表示させたいのです。 グーグル等がそのような仕様になってる事だと思います。 それらをサンプルで示してくれると助かります。 勝手なお願いですが、よろしくお願いします。

    • ベストアンサー
    • PHP
  • テーブルの結合時に空のカラムに『NULL』を入れない方法について

    宜しくお願いします。 MySQLでleft joinでテーブルの結合を行った際に、表示に必要なカラムのみを定義した場合に、空のカラムに『NULL』が入ってしまい、絞込みで検索時にこの『NULL』が邪魔になり、きちんと検索できません。left joinでテーブルを結合する場合に空のカラムに『NULL』が入らない様にする方法はありますか? クエリ文 select a.column1,b.column2 from a left join b on a.column3 = b.column3 where column2 like '%%'; 上記の様に検索した場合、likeで曖昧検索の上、検索内容を指定していないので、全データが検索されるかと思ったのですが、テーブルbのcolumn2が空のカラムは検索されず、HIT数が減ります。このwhereは必須で、どうしても入れなければならない状況なので、空のカラムも検索する方法があると助かります。 何卒、ご教授の程、宜しくお願いします。

    • ベストアンサー
    • MySQL
  • WHERE カラム名 <> ''の意味

    $result = $db->query("SELECT カラム名 FROM テーブル名 WHERE カラム名 <> ''"); PHPでSQL文を作成しているサンプルがあるのですが、「WHERE カラム名 <> ''」の意味が分かりません。カンマ二つで空文字? これはどういう意味でしょうか? また、<>は何と読むのでしょうか?(検索したいので)

    • ベストアンサー
    • MySQL
  • エクセルマクロ非表示セル検索法について

    Findメソッドでセルを検索し、行及び列番号を求めたいのですが、セルを非表示にしておくと検索できず求めることが出来ません。 非表示セルも可能にするにはどうすれば良いのですか? 列番号 = Cells.Find("キー").Column  ' 失敗 列番号 = Rows(1).Find("キー").Column ' 失敗