2016-05-28 2 views
0

Diese Frage ist hart, aber was ich tue, ist die Abfrage von Binärdaten, um Vorkommen zu überprüfen. Ich kann die Volltextsuche nicht verwenden und bin mir nicht sicher, ob das helfen würde, aber ich habe eine Zeichenfolge in der Datenbank wie 00100 (aber 256 Zeichen lang) und ein Benutzer versucht, die Datenbank 00101 zu durchsuchen. Gibt es eine Möglichkeit, alle Zeilen zu finden, die eine 1 in der 3. Position haben? Gibt es auch eine Möglichkeit, dies mit Multiple-Position-Lookups (z. B. 1 für die 3. und 5. Position) zu tun?Führen Sie Mysql Abfrage, die binäre Zeichenfolge an bestimmten Standorten maskiert

Ich frage, weil ich versuche, fünf Stücke von Daten zu nehmen und sie in eine Zeile der Datenbank und nicht als fünf verschiedene Zeilen. Jeder binäre Wert ist ein boolesches "Vorkommen" eines Objekts, also 1 oder 0.

Update:

Schema

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

Ich hätte dies früher aufgenommen haben, aber die tatsächliche 256-Hash-Strings sind 256 Zeichen lang sein. Ich gehe davon aus, dass es auf lange Sicht ein Problem sein wird, weil es nicht indexierbar ist.

Beispielsätze

media_id palette_hash sequence 
1 00000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000 1464423415 
2 00000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000 1464423415 
+0

besser für MYSQL Proxy verwenden, um Informationen zu maskieren. .. – Proxytype

+0

Sie müssen Ihr Schema und ein paar Beispiele Datensätze – e4c5

Antwort

1

können Sie die REGEXP Vergleich verwenden.

Alle Zeilen mit "1" in der dritten Position:

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

Alle Zeilen mit "1" in der dritten und fünften Position:

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

auf einer Million Zeilen würde Regex ziemlich langsam sein? – stwhite

+0

Verglichen mit was? Und ist das eine allgemeine Frage? Oder haben Sie es wirklich mit einer Million Zeilen zu tun? –

+0

Ich beschäftige mich mit so vielen Zeilen. Im Wesentlichen würde ich es mit einem Lookup 'column =" 00101 "vergleichen, das einen Index verwenden würde. Ich sollte das zuerst testen und für mich selbst sehen. – stwhite

Verwandte Themen