从会话中选择国家名称

时间:2013-04-15 12:01:02

标签: php

我有从网站上获取公司数据的网站,但这里我有双问题。

当我选择查询以从DB获取所有公司时,该网站将加载超过5分钟。

因此,我需要从浏览器中获取国家/地区,从DB选择包含用户所在国家/地区的所有公司并将其投放到会话中。

那么这个问题的解决方案是什么?

这是我的疑问:

    public static function selectallcompanydautocomplate()
    {
        $query = mysql_query("SELECT DISTINCT company_CompName FROM company");
        return $query;
    }

3 个答案:

答案 0 :(得分:0)

使用一些API,从IP地址为您提供用户所在的国家/地区。然后保存该国家并在数据库查询中使用。 您可以使用Google Geocoding

示例:

<?PHP

function visitor_country()
{
$ip  = $_SERVER['REMOTE_ADDR'];
$result  = "Unknown";


$ip_data = @json_decode(file_get_contents("http://www.geoplugin.net/json.gp?ip=".$ip));

if($ip_data && $ip_data->geoplugin_countryName != null)
{
    $result = $ip_data->geoplugin_countryName;
}

    return $result;
}


echo visitor_country(); // Output Coutry name [Ex: United States]

?>

答案 1 :(得分:0)

看看这个问题

How to determine a zip code and city from an IP address?

使用它来获取用户的位置,然后将其与数据库中的列匹配

答案 2 :(得分:0)

通常,您可以使用数据库为这些难以完成的任务创建快捷方式。

索引

使用INDEXING可以加快查询速度。索引数据库中的表时,将对数据进行排序。这类似于电话簿按字母顺序排序的方式 - 您不需要阅读整个事情来查找John Doe的电话号码。

在您的情况下,您可以按国家/地区和公司为此新表编制索引。数据库将提前对数据进行排序,并且花费更少的时间来寻找美国的所有公司(例如)。

权衡是写作需要稍长时间。然而,写作通常发生的时间少于阅读,所以交易通常是值得的。

查找表

查询当前需要5分钟才能运行。但是,如果结果没有太大变化,那么您只需要运行一次。让我们运行一次这个查询:

SELECT Company, Country
FROM company
GROUP BY Country, Company

...然后您将获得表格中唯一公司和国家/地区的列表。您可以将其保存到新表中并更快地拉动国家/地区(因为已删除所有冗余记录)。