PHPを使用して文字列で検索クエリの位置によって、MySQLのソートからの検索結果

StackOverflow https://stackoverflow.com/questions/2046784

  •  20-09-2019
  •  | 
  •  

質問

私は私の検索結果が、最小から最大までの文字列の位置の順になりたいです。 たとえば、「バナナ」リターンを探します:

<時間>

Babyfood、プラム、バナナ、米、歪ん

バナナ、脱水、またはバナナパウダー

バナナ、生

パン、バナナ、レシピから調製し、マーガリンで作った

キャンベル・スープ・カンパニー、V8 SPLASH果汁飲料、ストロベリーバナナ

キャンベル・スープ・カンパニー、V8 SPLASHスムージー、ストロベリーバナナ

キャンベル・スープ・カンパニー、V8 V. FUSIONジュース、ストロベリーバナナ

<時間> 「バナナ」は結果の最初の単語であり、「バナナ」は最後の言葉ですので、私は最後まで来て「CAMPBELLスープを...」したいので、

私は「生のバナナは、」最初に来てほしいです。

私は位置を見つけるために、strpos()を使用することができます知っているが、どのように私はそれをすべて一緒に置くのですか?

役に立ちましたか?

解決

あなたは、MySQLに簡単にこれを行うことができます。


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

表題MySQLのテーブルの列を表します。

他のヒント

これは、例えば、最高のクエリでそれを行うには、不必要に複雑usortやPHPで同様のものを含むことになります

SELECT data, INSTR(data, 'banana') as index
FROM table
WHERE data LIKE '%banana%'
ORDER BY index != 0, index

また、その値、ASCによってINSTR(titles, 'banana') as firstIndexと順序を選択することができます。これは、干し草の山の中の針の最初の位置のインデックスのインデックスを返します。

WHERE LIKEとあなたが設定されるべきではない何かを省略'%banana%'句上のタグ
SELECT id, pubdate, title, INSTR(title, 'tea') as `index`
FROM article
WHERE title LIKE '%tea%'
ORDER BY `index` ASC;
あなたはSQLクエリからそのデータを取得しない場合は、

は、 usort に使用していることをソートすることができます< href = "http://php.net/strpos" のrel = "nofollowをnoreferrer"> 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);

すなわち。あなたはここにあなたがそれをパラメータとして受け取り、二つの文字列に「バナナ」の位置(大文字insentive)を比較定義された関数を、所有してソートされます。


そして、あなたはあなたのアレイの出力のこの種を得るでしょう、一度ソートします:

$ /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側でいくつかのadditionnal計算を行うことが容易であるかもしれない...

あなただけのstrposをエミュレートする場合:

select col, locate('banana', col) as pos from t
order by pos < 1, pos, length(col)
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top