5

我希望我的搜索结果按字符串位置从小到大的顺序排列。例如,搜索“banana”会返回:


婴儿食品、李子、香蕉和大米,过滤

香蕉、脱水或香蕉粉

香蕉,生的

面包,香蕉,根据食谱准备,用人造黄油制成

CAMPBELL Soup Company,V8 SPLASH 果汁饮料,草莓香蕉

CAMPBELL Soup Company,V8 SPLASH 冰沙,草莓香蕉

CAMPBELL Soup Company,V8 V. FUSION 果汁,草莓香蕉


我希望“香蕉,生的”排在第一位,因为“香蕉”是结果中的第一个词,我希望“CAMPBELL Soup...”排在最后,因为“香蕉”是最后一个词。

我知道我可以使用 strpos() 来找到位置,但是我该如何把它们放在一起呢?

4

5 回答 5

5

您可以在 MySQL 中轻松完成此操作。


 SELECT  title,LOCATE('banana',title)
 FROM myTable   
 WHERE  LOCATE('banana',title) > 0
 ORDER BY LOCATE('banana',title) 

标题代表 MySql 表的列。

于 2010-01-12T05:24:38.760 回答
0

INSTR(titles, 'banana') as firstIndex您还可以按该值 ASC 进行选择和排序。这将返回大海捞针中第一个定位的索引的索引。标记一个WHERE省略任何不是的子句,LIKE '%banana%'您应该设置:

SELECT id, pubdate, title, INSTR(title, 'tea') as `index`
FROM article
WHERE title LIKE '%tea%'
ORDER BY `index` ASC;
于 2010-01-12T05:07:30.263 回答
0

它将涉及usortPHP 中不必要的复杂或类似的东西,最好在查询中执行,例如:

SELECT data, INSTR(data, 'banana') as index
FROM table
WHERE data LIKE '%banana%'
ORDER BY index != 0, index
于 2010-01-12T05:12:01.687 回答
0

如果您只想模拟 strpos:

select col, locate('banana', col) as pos from t
order by pos < 1, pos, length(col)
于 2010-01-12T05:12:24.213 回答
0

如果您没有从 SQL 查询中获取该数据,则可以使用usortand对其进行排序stripos;这样的事情应该做:

$arr = array(
    "Babyfood, plums, bananas and rice, strained", 
    "Bananas, dehydrated, or banana powder", 
    "Bananas, raw", 
    "Bread, banana, prepared from recipe, made with margarine", 
    "CAMPBELL Soup Company, V8 SPLASH Juice Drinks, Strawberry Banana", 
    "CAMPBELL Soup Company, V8 SPLASH Smoothies, Strawberry Banana", 
    "CAMPBELL Soup Company, V8 V. FUSION Juices, Strawberry Banana", 
);

function compare_position($a, $b) {
    return stripos($a, 'banana') - stripos($b, 'banana');
}

usort($arr, 'compare_position');
var_dump($arr);

即,您在这里使用自己定义的函数进行排序,该函数比较“香蕉”在作为参数接收的两个字符串中的位置(不区分大小写)。


排序后,您将获得数组的这种输出:

$ /usr/local/php-5.3/bin/php temp.php
array(7) {
  [0]=>
  string(37) "Bananas, dehydrated, or banana powder"
  [1]=>
  string(12) "Bananas, raw"
  [2]=>
  string(56) "Bread, banana, prepared from recipe, made with margarine"
  [3]=>
  string(43) "Babyfood, plums, bananas and rice, strained"
  [4]=>
  string(61) "CAMPBELL Soup Company, V8 SPLASH Smoothies, Strawberry Banana"
  [5]=>
  string(61) "CAMPBELL Soup Company, V8 V. FUSION Juices, Strawberry Banana"
  [6]=>
  string(64) "CAMPBELL Soup Company, V8 SPLASH Juice Drinks, Strawberry Banana"
}


当然,如果您从 SQL 查询中获取该数据,那么在 SQL 端进行一些额外的计算可能会更容易......

于 2010-01-12T05:18:01.853 回答