使用LIKE将数据从一个表匹配到另一个表

时间:2013-06-03 17:58:42

标签: php mysql

我想知道你可以将一张桌子的数据与另一张桌子的数据相匹配(下面的例子)

如果我想将第二张表格链接到第一张表格,并将城市的ID添加到标题中,该怎么办。

我想我需要这样的事情:

 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

任何人都可以指出我应该做的事情吗?

2 个答案:

答案 0 :(得分: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”之间的匹配(仅限于强调)。

答案 1 :(得分: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());
      }
   }

你需要选择fisrt id fron city table并检查是否出现在标题表中,然后执行相同的白色2 id表格城市。

我希望这可以帮助你,也许我对这个问题不是很了解,mi英语水平不是很好。