0

我想知道您可以将一个表中的数据匹配到另一个表(下面的示例)

如果我想将我的第二个表格链接到第一个表格并将城市的 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

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

4

2 回答 2

0

您将使用join带有条件的子句like

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

关键是获取模式中的通配符参数,使用concat().

顺便说一句,这将执行一个嵌套循环查询,它不会执行得很好。由于这种like情况,索引无助于提高性能。

headline更好的方法是在列上建立全文索引并match用于比较。这也将有助于防止像“London”匹配“Londonderry”这样的冲突。

而且,在您的示例LA中特别成问题,因为许多单词都包含LA. 您可以尝试以下方法:

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

即用空格代替标点符号,在标题的首尾各加一个空格,然后查找被空格包围的城市名称。这可以防止“LA”和“AtLAnta”之间的匹配(大写仅用于强调)。

于 2013-06-03T18:07:38.133 回答
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 id。

我希望这可以帮助你,也许我没有很好地理解这个问题,我的英语水平不是很好。

于 2013-06-03T18:25:26.817 回答