2013-06-03 49 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

相关问题