我有从网站上获取公司数据的网站,但这里我有双问题。
当我选择查询以从DB
获取所有公司时,该网站将加载超过5分钟。
因此,我需要从浏览器中获取国家/地区,从DB
选择包含用户所在国家/地区的所有公司并将其投放到会话中。
那么这个问题的解决方案是什么?
这是我的疑问:
public static function selectallcompanydautocomplate()
{
$query = mysql_query("SELECT DISTINCT company_CompName FROM company");
return $query;
}
答案 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)
答案 2 :(得分:0)
通常,您可以使用数据库为这些难以完成的任务创建快捷方式。
使用INDEXING可以加快查询速度。索引数据库中的表时,将对数据进行排序。这类似于电话簿按字母顺序排序的方式 - 您不需要阅读整个事情来查找John Doe的电话号码。
在您的情况下,您可以按国家/地区和公司为此新表编制索引。数据库将提前对数据进行排序,并且花费更少的时间来寻找美国的所有公司(例如)。
权衡是写作需要稍长时间。然而,写作通常发生的时间少于阅读,所以交易通常是值得的。
查询当前需要5分钟才能运行。但是,如果结果没有太大变化,那么您只需要运行一次。让我们运行一次这个查询:
SELECT Company, Country
FROM company
GROUP BY Country, Company
...然后您将获得表格中唯一公司和国家/地区的列表。您可以将其保存到新表中并更快地拉动国家/地区(因为已删除所有冗余记录)。