使用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添加到第一个数据库中。
任何帮助都将不胜感激。
答案 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。将坐标更改为字符串没有什么好处:您无法将它们编入索引,无法对它们进行排序,并且必须先将它们转换回来,然后才能使用它们进行计算。而是在需要这些值时加入地理表。