2015-04-29 17 views
0

我正在嘗試對日本字典DB進行查詢,我創建的數據庫標識了像ニコニコ(niko niko),ピカピカ(pika pika)等字樣的重複單詞。雖然我知道如何做LIKE %%查詢,但我不確定如何讓它定義一個部分的模式,並看看其他部分是否匹配。確定圖案是否在文本字段中重複出現的SQL查詢

參數:

  • 所有我正在尋找的話是長4個雙字節字符
  • 格局由前兩個字符,圖案B由最後兩個
  • 的查詢正在上是相當簡單構造一個headwords表上運行:它有兩個字段,idheadword
  • 整理桌子上被設置爲utf8_bin
  • 我們想過濾只搜索長度爲4個字符的詞條,然後識別模式A並查看模式B是否相同。如果是這樣,請返回id

獎勵:如果有一種方式來運行搜索直utf8,而不是utf8_bin,這將是撿了一些額外的匹配(例如つれづれtsure杜熱)有幫助。詞目列上有一個UNIQUE索引,並且需要utf8_bin排序才能正常執行正常操作的索引。

數據&結果實施例
每草莓的建議添加

 
id | headword 
============= 
1 | たべる 
2 | あらわれる 
3 | ばかばかしい 
4 | ニコニコ 
5 | じゅんびする 
6 | ぴかぴか 
7 | する 
8 | つれづれ 
9 | ひとびと 
10 | ひと 

期望的結果將返回id小號46;最佳結果也將返回89

  • 1是由1個字符過短,與模式A(たべ)不匹配模式B(
  • 2太長由1個字符,與模式A(あら)不匹配模式B (われ)。同上,用於5
  • 3具有用於模式A和B(ばか)匹配,但是它太長在6個字符
  • 710由2個字符太短。雖然有一個可能的模式A(例如ひと10出現在9ひとびと),它不是足夠長,以提供一個圖案B來比較
+1

這是不是真的有什麼SQL是爲。 –

+0

我已經做了PHP在過去相似,但暴力破解它可以採取的處理時間固體天爲多的行,我在表中已經有了,因此爲什麼我希望有一種方法可以做到這一切在MySQL方面,也許... – Kaji

+0

所有的模式是兩個假名嗎? – Strawberry

回答

1

在PHP中,這是你在找什麼:preg_match('/^(..)\1$/u', 'ニコニコ')true

u限定符指出字符是utf8。
..找到任意2個字符。
\1是背面參照(..),因此匹配的副本。
^$「錨」正則表達式到目標串的開始和結束。
'ニコニコ'僅僅是測試用例之一。

所以,創業之初,發現2個UTF8字符,確保他們立即重複,沒有別的如下。

相關問題