php를 사용하여 문자열에서 검색 쿼리 위치에 따라 mysql에서 검색 결과를 정렬합니다.

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

  •  20-09-2019
  •  | 
  •  

문제

내 검색 결과가 가장 작은 곳에서 가장 큰 문자열 위치 순서대로 원합니다. 예를 들어, "바나나"검색은 다음과 같습니다.


베이비 푸드, 자두, 바나나 및 쌀, 긴장

바나나, 탈수 또는 바나나 가루

바나나, 생

마가린으로 만든 빵, 바나나, 레시피로 준비된 바나나

Campbell Soup Company, V8 스플래시 주스 음료, 딸기 바나나

Campbell Soup Company, V8 스플래시 스무디, 딸기 바나나

Campbell Soup Company, V8 V. 퓨전 주스, 딸기 바나나


"바나나"가 결과의 첫 번째 단어이기 때문에 "바나나, 생"을 먼저 원하고 "캠벨 수프 ..."가 마지막 단어이기 때문에 마지막으로 올라 오기를 원합니다.

나는 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

당신은 또한 선택할 수 있습니다 INSTR(titles, 'banana') as firstIndex 그리고 그 가치에 따라 주문, ASC. 이렇게하면 건초 더미 내 바늘의 첫 번째 지수 지수가 반환됩니다. 태그 a WHERE 그렇지 않은 것을 생략하는 조항 LIKE '%banana%' 설정해야합니다.

SELECT id, pubdate, title, INSTR(title, 'tea') as `index`
FROM article
WHERE title LIKE '%tea%'
ORDER BY `index` ASC;

SQL 쿼리에서 해당 데이터를 얻지 못하면 사용을 정렬 할 수 있습니다. usort 그리고 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 측에서 추가 계산을 수행하는 것이 더 쉬울 수 있습니다 ...

strpos를 모방하고 싶다면 :

select col, locate('banana', col) as pos from t
order by pos < 1, pos, length(col)
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top