PDO使用MySql Case进行绑定变量排序

时间:2016-02-26 05:59:41

标签: php mysql pdo

我一直在研究这个,我想我找到了最好的解决方案,但我不是百分百肯定。我对PDO有很好的处理,但这是我第一次在mysql中遇到过CASE。这段代码正在运行,但我想知道它是否有效?如果我有多个键,我必须编写许多数组才能搜索和订购。是否有更短的方式来编写此代码或这是最有效的?谢谢!

$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

1 个答案:

答案 0 :(得分:2)

如果您希望完全控制订购结果集的方式,那么您的解决方案就是完美的。但是,如果你有多个密钥,那么我肯定会考虑使用fulltext search,因为它会更快,更少复杂的代码。但是,它具有与现在不同的排名算法。