2016-05-28 3 views
0

この質問は難しいですが、私が行っていることは、オカレンスをチェックするバイナリデータを照会することです。私はフルテキスト検索を使用することはできませんし、何とか助けてくれるのかどうかは分かりませんが、00100(ただし256文字)のようなデータベースに文字列があり、ユーザーがデータベース00101を検索しようとしています。 3番目の位置に1の行をすべて見つける方法はありますか?また、複数の位置検索(例:1、3位と5位)でこれを行う方法はありますか?特定の場所でバイナリ文字列をマスクするMysqlクエリを実行します。

私は5つのデータをデータベースの1つの行に入れ、5つの異なる行ではないので、私は尋ねます。各バイナリ値は、オブジェクトのブール値の「オカレンス」なので、1または0です。

更新:

スキーマ

`media_id` int(9) unsigned NOT NULL, 
    `256_hash` text NOT NULL, 
    `sequence` int(11) unsigned NOT NULL 

私はこれ以前に含まれているはずですが、実際の256のハッシュ文字列は256文字の長さです。私はこれが、索引付け不可能なので長期的には問題になると想定しています。

サンプルレコード

media_id palette_hash sequence 
1 00000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000 1464423415 
2 00000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000 1464423415 
+0

良好。 .. – Proxytype

+0

あなたはあなたのスキーマといくつかのサンプルレコードを投稿する必要があります – e4c5

答えて

1

あなたはREGEXP比較を使用することができます。

3番目の位置に「1」を持つすべての行:

# The pattern reads: "anything twice, then 1, then anything" 
SELECT * FROM rows WHERE (column REGEXP '^.{2}1.*$') 

第3及び第5の位置に「1」を持つすべての行:情報をマスクするためのMYSQLプロキシを使用する

# The pattern reads: "anything twice, then 1, then anything once, then 1, then anything" 
SELECT * FROM rows WHERE (column REGEXP '^.{2}1.1.*$') 
+0

百万行の正規表現はかなり遅くなるでしょうか? – stwhite

+0

何に比べて?これは一般的な質問ですか?あるいは、あなたは本当に百万行を扱っていますか? –

+0

私はその多くの行を扱っています。本質的には、索引を使用するルックアップ 'column =" 00101 "'と比較します。私はこれを最初に試し、自分のために見なければなりません。 – stwhite

関連する問題