【问题标题】:searching through sql通过sql搜索
【发布时间】:2018-12-15 18:19:04
【问题描述】:

我想做sql搜索

现在我正在使用这个

    $term="red sky";
    $query=explode(' ', $term);         
    $sql = "SELECT * as result FROM `disk` WHERE ";
    $a=0;
    foreach ($query as $part)
    {
        $part=mysqli_real_escape_string($con, $part);
        $a++;
        if ($a==1)
        {
            $sql .= " title like '%".$part."%'";
        }
        else
        {
            $sql .= " and title like '%".$part."%'";    
        }
    }
    $sql = $sql." order by time desc";
    $i=0;
    if ($term!="")
    {
        $result = mysqli_query($con, $sql);
        $row = mysqli_fetch_array($result);
    }

所以这会导致显示如下结果:

  1. vredy tskyi
  2. 红色的天空
  3. vredy 天空
  4. 红色的天空

我想以某种方式订购它,因此它首先显示“红色天空”,其他结果相同,因此他们可以自行安排。

第二件事---这种类型的搜索有点慢,我想让它更快。请通过制作一个新的更快的脚本或在这个脚本中更新来帮助我。 (必须相同但更快)

更多详情请评论。很难解释

【问题讨论】:

标签: php sql search


【解决方案1】:

抱歉,您的问题不够清楚。 我认为这段代码应该渲染得很快。

$sql = ""; $add = "";
$term="red sky";
$query=explode(' ', $term);         
foreach ($query as $part)
{
    $add .= " title like '%".$part."%' and";
}
$add .= substr($add,0,-3);
$sql = "SELECT * as result FROM `disk` WHERE".$add."order by time desc";
if ($term!="")
{
    $result = mysqli_query($con, $sql);
    $row = mysqli_fetch_array($result);
}

如果你想得到red & sky 的具体结果,那么你应该使用IN 子句而不是LIKE。 示例:

$sql = "";$new= [];
$term="red sky";
$query=explode(' ', $term); 
foreach($query as $part)
{
    $new[].= "'".$part."'";
}
$term=implode(',', $new);    
$sql = "SELECT * FROM `disk` WHERE title IN(".$term.") order by time desc";
if ($term!="")
{
    $result = mysqli_query($con, $sql);
    $row = mysqli_fetch_array($result);
}

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-06
  • 2015-09-12
  • 1970-01-01
相关资源
最近更新 更多