我一直在研究这个,我想我找到了最好的解决方案,但我不是百分百肯定。我对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
答案 0 :(得分:2)
如果您希望完全控制订购结果集的方式,那么您的解决方案就是完美的。但是,如果你有多个密钥,那么我肯定会考虑使用fulltext search,因为它会更快,更少复杂的代码。但是,它具有与现在不同的排名算法。