2011-09-11 43 views
5

Đầu tiên, tôi có một câu hỏi rất cụ thể, nhưng có lẽ một cách tiếp cận khác cho vấn đề của tôi (phần thứ hai) cũng có thể giúp tôi.Lặp lại các ký tự trong chuỗi trong mysql

Có cách nào để xử lý một ký tự trong chuỗi thông qua chỉ mục của nó trong mysql hay không. (ví dụ: trong PHP $ var [2] sẽ cung cấp cho bạn đặc quyền thứ 3)?

Cách rõ ràng là SUBSTRING(var, 3,1) nhưng vì chuỗi của tôi dài 1024 ký tự nên tôi cho rằng đây không phải là giải pháp nhanh nhất. Như được hiển thị trong mẫu mã sử dụng chuỗi con để lấy đuôi của chuỗi cũng không có chênh lệch hiệu suất. Có cách nào để lặp qua chuỗi không? (Shift phần tử đầu tiên?)

CREATE FUNCTION hashDiff(hash1 TEXT(1024), hash2 TEXT(1024), threshold INT) 
RETURNS INT 
DETERMINISTIC 
BEGIN 
    DECLARE diff, x, b1, b2 INT; 
    SET diff =0; 
    SET x = 0; 
    WHILE (x<1024 AND diff<threshold) DO 
     SET b1 = ASCII(hash1); --uses first character only!! 
     SET b2 = ASCII(hash2); 
     SET hash1=SUBSTRING(hash1, 2); 
     SET hash2=SUBSTRING(hash2, 2); 
     SET diff=diff+ ((b1-b2)*(b1-b2)); 
     SET x=x+1; 
    END WHILE; 
    RETURN diff; 
END 

Nếu bạn chưa đọc nó từ mã, tôi cố gắng viết một thủ tục lưu trữ để tính toán sự khác biệt hay khoảng cách giữa để băm. Sự khác biệt là tổng của khoảng cách vuông theo ký tự khôn ngoan (ví dụ: hashDiff(AA,AC)=(65-65)²+(65-67)²=4). Tăng hiệu suất đầu tiên có thể đạt được bằng cách giới thiệu một ngưỡng để hủy phép tính nếu các băm đã khác nhau. Nhưng kể từ mysql không phải là ngôn ngữ "mỗi ngày" của tôi, tôi bị mắc kẹt vào thời điểm này trong việc tìm kiếm tối ưu hóa khác. Cho đầy đủ hai mẫu băm:

YAAAAAAYAAAYAAVAAQAARAOAAOAQASAQAMAKAKAJIAJAJIAHAHIAKJAIIAHHAHIIAIHGAGFFAGGFEAFEEEEAEDDDDDAEEEEDEEEFAFFFFFFEFFFEFFFFFGFEEFFEEEFFFJEFFEEEEEEELFFFFEEFJEEEEDIEEEEEIEEEEHEEEJEEFKFEFKGGFNHGOIIJTJKYONYNMTGHNHHQISJJQIKWLXJJSMYRQWJOGKDDFCCBBAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAYAAAYAAWAARAASASAAQARAUAYAYATAOALKAJAJIAIAHHAHGAGFAFFAEFFAEFFAFFFAEEFFAFEEEDADEDDDDADDDCDDDDDAEEEFEEEEDDDEEEDEDDEEEFEFFGGFMFHGFFFGFFFLGHGGHGGNHHGGGOHGHGHMGGFGMFFFMFGFLFFFMGFFMGGMGGGNGGMGGLGGLGGMGGLEIEEHDCGCGCDGDGDCGDFCECCECECECECFCECFCFCFCFCFCGCJGYCYAAAAAAYAAAYAAUAATAAUAUAAUARARAQAPAPASARRAPARQAPAQQAQQAQSAKMATKKAIIHAIHGAGGGGAGHHGGAGGFGFFAFFGEFFFFFAFFGFGGGFFFEEFGFFGGFGGHIJJLKLWLKJJIJJJKJRLJKLKKKUKLLKKUMMKJIQIIIISKJJWKLLXMLMYMLNYMMYMLLWJIQIINFGKFFKEEIDHEDHDDFCECCFDECCFCFDGCDGCGCGEGCDCECECFDFCGDGCIEKEOAYNFBREUXKPQMMQTKT MMNJLPPVYYYTOUOPOLLJKKJJJIJIMJJJLIJJLLJIIHHIHHHIGHIHIHJHHHJHHIHGHGHFGHGFFEFEEEFEFEFFGGHIHIHGHGHHIIIIHIIJMNLONKLKKKKKKKMLKKLONMKOOOMLOPONMNMKKLLKKLMNKLMMMNMOPPOORPORSSVRTSSRTRRTSSTTXSTQRPONOKKLKLJMKJJIJIIHHHIIIJHIJIJJIJIKJIMWMYYDAAAAAAAAAAA

AAAAAAAAAAABAABAACAACACAACADADAEADADADADDAEAEEAEAFEAEEAEFAFGAGGGAGGGAHHHAHIIIAIHIJHAIIHIHHAJIHIJIJKJAJJJIKJJJJKKJKJKKLKLKLLMMMNNMYOOOOOOPOONYOONONNPYNOOOPYOOPPPYNONNYMLLWLLKUJIISHIHOGGMFGFLFFMGGLFGLGFLFFKFKFFLEEKFLEFJFKFGNGNHLFHJFIEGDIEKGOIRFGBBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABABACACDACADDACADDADDAEDAFEAEEFAFFFAFFGAFGGGAIGHHIAHIHHHHAHIHIIJJIIAIIIIJIJKJIIIIJJHIIHIIIIJIIIIRJJJJKJJJJLVKLLKLLKXLMMKMXMLLLMWMMMMYMNLYMNNYNNMYMMNYMLYLMLXKJRIHPHIMGGMFEJEJEEIEEHDGCDFCFDCFCECECCEBEBECFDGCFDNGLDBAAAAAAAAAAAAAAAAAAAAAABAAAAABAABABAACACACACACACACADDADAEEAFAFGAFGAHGAGGAGGHAGGIAIHJAJJJJAJKKKKAMLMNNNANOMMNNMMNAONMNOOOMOOPOMNOMMNPOOPPPP RQQYPPRPPPPPNOYLLMMMMLYLMLMLYLMLMMYLNNMYNLLWMLKXLLLUKIKQIIQGHHPFHNGFLFFLGFJEEJEIDDIDCHDFCDGCFCCFCECECCECFCGDGDHDHDIFIDEBBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAABBBBBCBCCCCDCCCCCCCCDDDDEDEEEEFFDEGGHGHHHGHHHHHHIIJJJJJIJJJJJJIKJJKLKKMMNMMMMMMMNNNNNNLNNONPONNNOOOOPQQQRSSSSSSUTSTUUUVWVVXUYXWVXVXWYVYWYVYYUWVUTTSSPQPQOPOPONONOMONOOONNNMMNLJJKJIIJHHGGGFHFGFFFFEEEDDEEEEFGGIGJLRNEAAAAAAAAAAAAA

Bất kỳ sự giúp đỡ hoặc gợi ý sẽ được đánh giá.

+0

bạn có thể xử lý chuỗi của mình bốn byte cùng một lúc với hàm HEX. –

Trả lời

0

Cách duy nhất bạn có thể sử dụng một loạt các loại sẽ là sử dụng bảng tạm thời và con trỏ/kết quả.

Vấn đề là bạn sẽ vẫn cần phải lặp qua các chuỗi và sử dụng chuỗi con để tách chúng ra. Theo hiểu biết của tôi, không có chức năng 'wordwrap' hoặc 'explode' để cắt chuỗi.

Các vấn đề liên quan