通过字符串匹配从数据库中检索数据,并跳过重复值

时间:2018-08-28 15:41:44

标签: php mysql sql database

我有数百万张照片的大型数据库。它包含一个名为“地方”的字段,其中包含Db中每张照片的位置信息(即镇,省,城市,国家等),如下所示:

56461972:MetroTuria:POI,20220221:Olivereta:Suburb,776688:Valencia:Town,12602139:Valencia:Province,12578038:Valencia:AutonomousCommunity,20080321:46018:Zip,23424950:**Spain:Country**,56043644:Europe%2FMadrid:Timezone   

我有兴趣检索在其中找到的所有国家/地区名称,并且可能会将它们返回到另一个表中。然后跳过国家名称重复的地方。这样,我将对拍摄照片的国家有所了解。 因此,类似于找到该文本(即“:Country”)的地方,它将检索与之关联的国家/地区名称,并将其添加到新表中。

这很难解释。希望有道理。

预先感谢。

*一些响应更新:

56558566:Duval+Street:Suburb,2432044:Key+West:Town,12587846:Monroe:County,2347568:Florida:State,12772085:33040:Zip,23424977:United+States:Country,56043648:America%2FNew_York:Timezone  
56574535:Columbus+Park:Suburb,2496012:South+Boston:Suburb,2367105:Boston:Town,12588712:Suffolk:County,2347580:Massachusetts:State,12758726:02127:Zip,23424977:United+States:Country,56043648:America%2FNew_York:Timezone    
1984273:Artybash:Town,2120895:GornoAltaysk:Town,12597718:Turochakskiy+Raion:District,20070530:Altai+Republic:Province,24553375:649:Zip,23424936:Russia:Country,56043608:Asia%2FOmsk:Timezone

而且,我只希望它们检索一次。例如如果“西班牙”与许多图像相关联,则应仅考虑一次。我的整个目的只是查看拍摄图像的国家/地区的总数和名称。

请注意,我只是SQL的初学者。

2 个答案:

答案 0 :(得分:1)

如果您只想提取国家/地区,则可以使用:

select substring_index(substring_index(place, ':Country', 1), ':', -1)

内部substring_index()提取国家之前的部分。这是一个长字符串,结尾为' . . . Zip,23424950:**Spain'。外部的substring_index()占据了最后一个冒号之后的所有字符,这是国家的名字。

Here是一个学期。

编辑:

如果要按国家/地区计数,则:

select substring_index(substring_index(place, ':Country', 1), ':', -1) as country,
       count(*)
from t
group by country;

答案 1 :(得分:0)

要获取每个国家/地区的计数,可以使用:

SELECT s1.theCountry, count(*) AS theCount
FROM (
  SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(place, ':Country', 1),':',-1) AS theCountry
  FROM photos
) s1
GROUP BY s1.theCountry