2016-02-26 31 views
0

我一直在研究这个,我想我已经找到了最好的解决方案,但我不是100%确定。我对PDO有很好的处理,但这是我第一次在mysql中遇到CASE。此代码正在工作,但我想知道它是否有效?如果我有多个键,我将不得不编写许多数组才能搜索和排序。有没有更短的方式来编写这段代码,或者这是最有效的?谢谢!PDO使用MySql案例与绑定变量排序

$filters = " 
    AND (name LIKE :keys 
    OR note LIKE :keys 
    OR tagnum = :skeys) 
"; 
$order = " 
    ORDER BY 
     CASE 
      WHEN tagnum = :skeys THEN 0 
      WHEN name = :skeys THEN 1 
      WHEN name LIKE :lkeys THEN 2 
      WHEN name LIKE :rkeys THEN 3 
      ELSE 4 
     END 
    ASC 
"; 
$arr[':keys'] = "%$keys%"; // both wild cards 
$arr[':skeys'] = $keys; // stripped keys, no wild cards 
$arr[':lkeys'] = "$keys%"; // left key, right wild card 
$arr[':rkeys'] = "%$keys"; // right key, left wild card 

回答

2

如果你想完全控制你如何订购你的结果集,那么你的解决方案是完美的。但是,如果您有多个密钥,那么我肯定会考虑使用fulltext search,因为它会更快,而且更少地与代码相关联。但是,它有不同于现在的排名算法。

+0

好信息有。谢谢。 – b3tac0d3