PHP、MYSQL、JSOn社交网站快速搜索功能提示
嗨,我正在开发社交网站,需要一个建议。我使用codeignitor框架,php作为核心语言,jQuery作为客户端脚本 现在我想在网站上实现用户搜索功能,用户可以在其中搜索其他用户 如果我在php中使用分页,它会有点慢,性能也不快,即使数据库很大,它也会更慢 所以我尝试的是,我对前1000人进行了查询,并使用json编码,使用这个插件一次显示前10个结果 有没有人可以帮助我了解我需要遵循的所有内容,包括技术、提示、查询、mysql数据库等 这是我当前在模型中的函数PHP、MYSQL、JSOn社交网站快速搜索功能提示,php,jquery,mysql,json,Php,Jquery,Mysql,Json,嗨,我正在开发社交网站,需要一个建议。我使用codeignitor框架,php作为核心语言,jQuery作为客户端脚本 现在我想在网站上实现用户搜索功能,用户可以在其中搜索其他用户 如果我在php中使用分页,它会有点慢,性能也不快,即使数据库很大,它也会更慢 所以我尝试的是,我对前1000人进行了查询,并使用json编码,使用这个插件一次显示前10个结果 有没有人可以帮助我了解我需要遵循的所有内容,包括技术、提示、查询、mysql数据库等 这是我当前在模型中的函数 function se
function search_user($cntry,$male,$female,$age_min,$age_max){
$this->db->select('user_profiles.user_id,user_profiles.first_name,
user_profiles.birthday,user_profiles.gender,user_profiles.picture,
user_profiles.last_active,location.city,location.country');
$this->db->from('user_profiles');
$this->db->join('location', 'user_profiles.user_id = location.user_id');
$this->db->limit(800);
// Search condition :::: Country
if($cntry){
$this->db->like('location.country',$cntry, 'both');
}
// Search condition :::: Male or Female
if($male==1 && $female==0) { $g='Male'; $this->db->like('user_profiles.gender',$g, 'both'); }
if($male==0 && $female==1) { $g='Female'; $this->db->like('user_profiles.gender',$g, 'both'); }
// Search condition :::: Age range
if($age_min && !$age_max){
$this->db->where('(YEAR(NOW())-YEAR(user_profiles.birthday)) >= ', $age_min);
}
if($age_min && $age_max){
$this->db->where('(YEAR(NOW())-YEAR(user_profiles.birthday)) >= ', $age_min);
$this->db->where('(YEAR(NOW())-YEAR(user_profiles.birthday)) <= ', $age_max);
}
$this->db->order_by("user_profiles.last_active", "desc");
$query = $this->db->get();
$data=array();
foreach ($query->result() as $row){
$row->last_active=$this->online_status($row->last_active);
$row->birthday=$this->birthday($row->birthday);
$data[]=$row;
}
if ($query->num_rows() > 0)
{
return $data;
}
else
{
$data = array(
'result' =>'404'
);
return $data;
}
}
函数搜索用户($cntry、$male、$femal、$age\u min、$age\u max){
$this->db->select('user\u profiles.user\u id,user\u profiles.first\u name,
用户档案。生日,用户档案。性别,用户档案。图片,
用户_profiles.last_active,location.city,location.country');
$this->db->from('user_profiles');
$this->db->join('location','user\u profiles.user\u id=location.user\u id');
$this->db->limit(800);
//搜索条件:::国家/地区
如果($cntry){
$this->db->like('location.country',$cntry,'both');
}
//搜索条件:::男或女
如果($male==1&&$female==0){$g='male';$this->db->like('user_profiles.gender',$g'both');}
如果($male==0&&$female==1){$g='female';$this->db->like('user_profiles.gender',$g'both');}
//搜索条件:::年龄范围
如果($age\u min&!$age\u max){
$this->db->where('(YEAR(NOW())-YEAR(user_profiles.birth))>=',$age\u min);
}
如果($age\u min&$age\u max){
$this->db->where('(YEAR(NOW())-YEAR(user_profiles.birth))>=',$age\u min);
$this->db->where('(YEAR(NOW())-YEAR(user_profiles.birth))有许多因素可能导致此过程缓慢。我们需要解决以下问题:
- 您正在数据库中搜索哪些列
- 这些列有索引吗
- 您的查询是什么样子的?是否只返回必要的列
- 您希望以多快的速度显示结果?立即显示为用户类型,或在用户单击“搜索”后显示
- 如何返回结果
- 如何显示结果
通常,您可以在几毫秒内搜索非常大的数据集——因此,我怀疑,只要设置正确,数据库就是问题所在
好吧,尽管如此……
如果您有一个非常大的社交网络,我建议您实现如下内容。这是一个搜索索引,可以很容易地实现到CodeIgniter中:
您可以将您的用户、他们的个人资料数据、帖子、评论等添加到索引中,并使用功能强大的语言处理查询语言进行搜索,然后以您希望的任何格式非常快速地返回结果。这很容易变成“实时”使用ajax和json进行搜索。有许多因素可能导致此过程缓慢。我们需要解决以下问题:
- 您正在数据库中搜索哪些列
- 这些列有索引吗
- 您的查询是什么样子的?是否只返回必要的列
- 您希望以多快的速度显示结果?立即显示为用户类型,或在用户单击“搜索”后显示
- 如何返回结果
- 如何显示结果
通常,您可以在几毫秒内搜索非常大的数据集——因此,我怀疑,只要设置正确,数据库就是问题所在
好吧,尽管如此……
如果您有一个非常大的社交网络,我建议您实现如下内容。这是一个搜索索引,可以很容易地实现到CodeIgniter中:
您可以将您的用户、他们的个人资料数据、帖子、评论等添加到索引中,并使用功能强大的语言处理查询语言进行搜索,然后以您希望的任何格式非常快速地返回结果。这很容易变成“实时”使用ajax和json进行搜索。要求包含最少数量的字符并对查询进行限制!如果我使用此插件限制查询,例如50,则不会显示超过50个的结果作为搜索结果。要求包含最少数量的字符并对查询进行限制!如果我将限制查询使用此插件,例如50,它将不会显示超过50的结果作为搜索结果。嗨,斯沃金斯,谢谢你回答我的问题。这些提示对我真的很有帮助。以下是你的问题的答案…我正在搜索用户id、用户名、名字、图片、生日、性别和在线状态。而且,不,我的表没有索引,我只使用user_id作为主键。我只返回指定的列。我希望在用户登陆页面后立即重新搜索,然后单击并更改输入。我需要输出结果以显示用户的配置文件和基本信息。你能提供你的查询吗?你在使用mysql吗?我在我的主要问题中编辑查询。这是一个实时网站,你可以跟踪每个用户性能如果您有时间,我将感谢用户:demo@demo.com和Pass:12345能否打开评测-$this->output->enable_profiler(TRUE);在controllerOK中,很抱歉延迟。我刚刚查看了您的页面。我认为这里没有太大问题。您的jquery插件使用在处搜索的结果对结果进行分页(这非常快,因此没有问题)。我认为您的查询非常好,尽管我可能会在那里进行一些优化(对男性/女性使用like
似乎有些过分了)。无论如何,只要有几个搜索功能选项,我想你就可以了