我有一个充满名称的数据库。我想搜索其中包含的所有名称$name
。但是,我希望具有$name
名字的人首先出现。
例如$name = John
。
我的结果是:
我希望他们喜欢(将结果放在姓氏上的结果,将结果放在姓氏上的结果,其他结果):
亚历克斯·约翰·史密斯
$name = $_POST['text_search'];
$sql = <<<SQL
SELECT *
FROM `teachers`
WHERE `name` LIKE '%{$name}%' ORDER BY `name` ....
SQL;
我该如何订购?
您可以使用PHP进行订购(请参见@siniradam的答案)...,也可以直接使用SQL进行订购:
如果您想要按原始顺序排列(但名字在前的则为首)
SELECT `name`
FROM `teachers`
WHERE `name` LIKE '{$name}%'
UNION
SELECT `name`
FROM `teachers`
WHERE `name` LIKE '%{$name}%' ORDER BY `name`
AND `name` NOT LIKE '{$name}%'
如果您希望它们在2个子集中按字母顺序排序:
SELECT `name`, 0 `is_not_first`
FROM `teachers`
WHERE `name` LIKE '{$name}%'
UNION
SELECT `name`, 0 `is_not_first`
FROM `teachers`
WHERE `name` LIKE '%{$name}%' ORDER BY `name`
AND `name` NOT LIKE '{$name}%'
ORDER BY `is_not_first`, `name`
注意-如果表很大,SQL中的这种方法比仅PHP的方法要慢,因为它基本上查询表两次。但是,在较小的桌子上也一样。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句