2013-06-03 80 views
0

我不知道,你可以從一個表匹配到另一個數據(下面的例子)匹配數據到另一個LIKE

,如果我想我的第二個錶鏈接到的第一個,並添加標識這個城市的標題。

我想,我需要這樣的:

SELECT * FROM headlines where headline LIKE %$city% 

然後做一個插入的一切時間,我得到的東西回來。但是,然後我需要重複我對每次添加新標題的百個城市的查詢。

First Table (Cities) | Second Table (Headlines) 
    ______________________________________________________ 
    id: 1 name: New-York | Something happened in New-York 
    id: 2 name: LA  | Something else happened in LA 
         | Somehting happened in LA and New-York 

任何人都可以指出我應該考慮做什麼嗎?

+1

我不確定你在問什麼,因爲你沒有解釋它的實際應用......如果不理解應用程序,很難說你是否應該做某件事,因爲我們需要能夠衡量我們自己的方法與你的方法。 – dudewad

+0

你是否在說每次添加標題(由用戶?由誰?),都會在城市表中添加一個新城市? – dudewad

+0

頭條新聞將從不同的新聞網站被刮掉。但我認爲戈登的回答如下是我正在尋找的。 – Callombert

回答

0

你會使用join條款與條件like

SELECT h.*, c.cities 
FROM headlines h join 
     cities c 
     on h.headline like concat('%', c.city, '%') 

的關鍵是讓在模式通配符參數,使用concat()

順便說一句,這將做巢循環查詢,這將不會很好地執行。由於like條件,索引無助於提高性能。

更好的方法是在headline列上建立全文索引並使用match進行比較。這也將有助於防止像「倫敦」匹配「倫敦德里」這樣的衝突。

而在你的例子中LA特別有問題,因爲很多單詞包含LA。你可以嘗試這樣的:

 on concat(' ', replace(replace(replace(h.headline, ',', ' '), ':', ' '), '.', ' '), ' ') like 
       concat('% ', c.city, ' %') 

也就是說,用空格代替標點,在開始和標題的末尾添加一個空格,然後查找城市名稱用空格包圍。這可以防止「LA」和「AtLAnta」之間的匹配(僅限於強調)。

+0

你能更詳細地描述一下你認爲更好的方法嗎? (我對MySQL很新穎) – Callombert

+0

@metareviewr。 。 。如果你正在做一次快速而又髒兮兮的一次性比較,那麼讓'像'一樣工作很好。如果您想多次執行此操作,請考慮全文索引。細節最好留給文檔。 。 。 http://dev.mysql.com/doc/refman/5.5/en/fulltext-search.html。 –

+0

我會研究它。非常感謝你。 – Callombert

0

你可以試試這個

$sql = "SELECT * FROM cities"; 
$res_mysql=mysql_query($sql); 
    while($arr=mysql_fetch_array($res_mysql)){ 
     while(mysql_fetch_array($res_mysql_like)){ 
      $update= "UPDATE `Headlines` SET `id` ='".$arr[1]."' 
      WHERE `headline LIKE %$arr[1]%"; 
     mysql_query($update) 
     or die(mysql_error()); 
     } 
    } 

您需要選擇最前一頁ID弗朗城市表,並檢查是否出現在標題表中,然後執行表城市同樣的白色2號。

我希望這可以幫到你,也許我對這個問題不太瞭解,mi英語水平不是很好。

+0

這是另一種可能性,謝謝! – Callombert

相關問題