2015-07-04 38 views
0

我想在表中搜索另一列的每個成員的列並打印結果。我在PHP中編寫了一個for循環,但它太密集,因爲它涉及太多的查詢。我願意使用任何支持Web的語言。對另一列的每個成員搜索一列

$search1=mysql_query(SELECT COLUMN2 FROM TABLE WHERE COLUMN1 LIKE %Search_term%); 
    for($i=0; i < $search1->num_rows; $i++){ 
     $search2=mysql_query(SELECT COLUMN1 FROM TABLE WHERE COLUMN1 LIKE %Seach_term% AND COLUMN1 LIKE 「%$search1[$i]%」 LIMIT 3); 
     echo 「$search2[0]」; 
     echo 「$search2[1]」; 
     echo 「$search2[2]」; 
     echo 「<P>」; 
     $i++; 
} 

有沒有辦法做到這一點,沒有做一個選擇語句for循環的每個實例?如果我可以選擇一次,然後在SQL中循環並對它進行排序或分組,我會非常高興。我查看了GROUPBY或SORTBY,但是我無法找到一個與此相關的示例來將其應用於此。

謝謝。

edit: example table 

    id  column1      column2 
    1   walk park dog win for good  walk 
    2   walk go forward do win dog  go 
    3   park job forward daycare a  park 
    4   go with me certified job I  with 
    5   dolphin job park walk care  dolphin 
    6   pack for good park go job  for 
    7   leader forward win dog for  leader 
    8   leader go forward win walk  forward 
    9   tablet forward go walk for  tablet 
    10  Jones job me certfied do go job 


results of searching by column2 into column1: 

walk go forward do win dog 
dolphin job park walk care 
leader go forward win walk 

walk go forward do win dog 
go with me certified job I 
pack for good park go job 

walk park dog win for good 
park job forward daycare a 
dolphin job park walk care 

go with me certified job I 

dolphin job park walk care 

walk park dog win for good 
leader forward win dog for 
tablet forward go walk for 

leader forward win dog for 
leader go forward win walk 

walk go forward do win dog 
park job forward daycare a 
leader forward win dog for 

tablet forward go walk for 

park job forward daycare a 
go with me certified job I 
dolphin job park walk care 

-

實際表是25000000個文獻引用,第二列與取出共同停止字相同的引文。夢想是將共同的引用組合在一起。

再次感謝您。

+1

您能否介紹一下所涉及表格的詳細信息以及它們之間的數據鏈接? –

+0

我剛剛提供了一個樣本表和鏈接的解釋。 – user3643012

回答

1

只是開始 - 特別是當你在你的表中有25,000,000條記錄時...
你的PHP似乎從第二列抓取一個單詞,並從第一列返回三個隨機匹配。這種限制下降到三點,但以下都沒有。

只是命中的 - 包括,例如,「散步的公園狗贏得好」爲「走出去」和「領導者向前走贏走」的「爲」:

SELECT 
    c2.column2 
    , c1.column1 
    , c1.id 
FROM citation c1 
JOIN citation c2 
    ON INSTR(c1.column1, c2.column2) 
ORDER BY c2.column2, c1.column1 
; 

多一點選擇 - 限制了比賽,以充分的話:

SELECT 
    c2.column2 
    , c1.column1 
    , c1.id 
FROM citation c1 
JOIN citation c2 
    ON FIND_IN_SET(c2.column2, REPLACE(c1.column1, ' ', ',')) 
ORDER BY c2.column2, c1.column1 
; 

這種方式,但是,即使是簡單的複數(只需添加一個「s」形成)不再抓 - 比較添加第十一記錄,這將返回「海豚」但在下面的SQL Fiddle的第二個查詢中不再使用「dolphin」。

看到它在行動:SQL Fiddle

這,當然,需要調整/更詳細的要求。

就個人而言,我不明白,怎麼「第二列是取出共同停止字相同引用」 - 因爲我發現在該列只是單個單詞。
或許,我可能只是在一張桌子上帶有(預處理過的)引文(引用原稿)的東西,還有一個包含單詞派生形式的單詞列表。 (或者,引用預處理可以處理這方面的問題。)一個簡單的SQL當然不會解決名詞「散步」和動詞「散步」之間的區別。在這個輸出中包括這個SQL Fiddle只會提醒那個正在處理它的人 - 如果這在你的上下文中完全相關。

根據您的實際(整體)的要求,它可能是值得考慮MySQL's full text functionalities

請評論,如果和因爲這需要調整/進一步的細節。

相關問題