MySQL / PHP - 计算列中单词的出现次数

时间:2014-09-12 11:04:36

标签: php mysql sql

我有一个地点表,其中包含不同国家/地区。 我想计算每个国家/地区的发生情况,并将其插入名为“地点”的新表中。

位置表

ID | Location            | Count|
1  | United Kingdom      | 5    |
2  | United States       | 2    |
3  | Country Unavailable | 3    |

以下代码会将所有不可用的国家/地区插入数据库。

计算未知字符串出现次数的最佳逻辑是什么?

<?
    $country = mysqli_query($dbc, "SELECT Location, COUNT(location) 
    FROM TWEETS WHERE location LIKE 'country unavailable'");
    while ($row=mysqli_fetch_array($country))
{
    $country_count=$row[0];
    mysqli_query($dbc, "INSERT INTO Location(location, count) VALUES
   ('country unavailable', '$country_count')"); 
}
?>

对不起,上述声明对我有用,我没有说清楚。 因此,这将计算国家/地区不可用并将其插入数据库。 我的问题是我想插入一个有价值的位置,但我不知道该位置是什么,所以我不能使用&#39;喜欢&#39;。

有什么工作?这就是我想要的工作:

<?
 $country = mysqli_query($dbc, "SELECT Location, COUNT(location) FROM TWEETS
 WHERE location LIKE '?????????????'");
 while ($row=mysqli_fetch_array($country))
 {
 $country_string=$row[0];
 $country_count=$row[0];
 mysqli_query($dbc, "INSERT INTO Location(location, count) VALUES
 ('$country_string', '$country_count')");
}

&GT?;

因此,如果我的数据库返回10个位置,其中一个可能只是澳大利亚。它必须能够接收该字符串并计数。

2 个答案:

答案 0 :(得分:0)

您可以只在一个查询中执行此操作,例如:

 $query = "INSERT INTO Location (location, count) 
 SELECT Location, COUNT(location) FROM TWEETS WHERE location LIKE 'Country Unavailable'";

 mysqli_query($dbc, $query);

答案 1 :(得分:0)

如果你想使用计数...你必须按

分组
$query = "INSERT INTO Location (location, count) 
               SELECT Location, COUNT(location) 
                 FROM TWEETS 
                WHERE location LIKE 'Country Unavailable' 
             GROUP BY Location";

- &GT;插入新的数据行&#39;国家/地区不可用&#39;,2(计数)

你真的想插入一个新的数据流吗?或者更新?

$query =  "UPDATE Location
             SET count = (
               SELECT COUNT(location) 
                 FROM TWEETS 
                WHERE location LIKE 'Country Unavailable' 
             GROUP BY Location)
           WHERE Location = 'Country Unavailable'";

编辑:

我不确定我的问题是否正确,但不应该做以下工作?

$query = "INSERT INTO Location (location, count)
                   SELECT t.Location, Count(*) FROM TWEETS t
                LEFT JOIN Location l 
                       ON t.location = l.Location
                    WHERE l.Location is null
                 GROUP BY t.Location"