如何在一个数据库中搜索与其他数据库中的值匹配的值使用SQL

时间:2015-10-12 11:56:20

标签: mysql database

使用SQL我想在数据库上创建类似循环的东西,该数据库具有城市名称并搜索另一个数据库中的每个城市,如果匹配,我想将相应的纬度和经度添加到第一个数据库。 / p>

我不知道如何在没有PHP的情况下单独使用SQL。

其中一个数据库是一个wordpress数据库,里面有一个名为wp_postmeta的表有4列:

meta_id,post_id,meta_key,meta_value。

所以在这里我希望所有元关键城市都像他们一样循环:

SELECT meta_value FROM wp_postmeta WHERE meta_key =“city”

我想在名为GEO的同一服务器中的另一个数据库中搜索这些值:

ID,city_name,lat,long。

因此,如果第二个数据库中的city_name与city匹配,我希望将第二个数据库中的lat和long添加到第一个数据库中。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:1)

您可以通过JOIN操作将postmeta城市值与地理位置表相匹配。试试这样的事情

  SELECT pm.post_id, TRIM(pm.meta_value) city_name, 
         geo.lat, geo.lon
    FROM wp_postmeta pm
    LEFT JOIN geo ON TRIM(pm.meta_value) = geo.city_name
   WHERE pm.meta_key='city'

只要表格中城市名称的拼写匹配,就会显示城市名称的纬度和经度。请注意,LEFT JOIN使其显示所有城市,包括没有匹配lat / lon值的城市。如果您不想要不匹配的城市,可以将其更改为普通的INNER JOIN。

听起来你希望通过将城市的拉特和大门插入其中来改变你的postmeta表。这是一个坏主意™。 postmeta将其所有值存储为字符串。 Lat和lon正确存储为FLOAT,有时甚至是DOUBLE。将坐标更改为字符串没有什么好处:您无法将它们编入索引,无法对它们进行排序,并且必须先将它们转换回来,然后才能使用它们进行计算。而是在需要这些值时加入地理表。