我想知道你可以将一张桌子的数据与另一张桌子的数据相匹配(下面的例子)
如果我想将第二张表格链接到第一张表格,并将城市的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
任何人都可以指出我应该做的事情吗?
答案 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英语水平不是很好。