Ordenar los resultados de búsqueda de MySQL por la posición de la consulta de búsqueda en el uso de PHP cadena de

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

  •  20-09-2019
  •  | 
  •  

Pregunta

Quiero mis resultados de búsqueda para estar en el orden de posición de la cadena de menor a mayor. Por ejemplo, la búsqueda de rendimientos "banana":


Papillas, ciruelas, plátanos y arroz, tensas

Plátanos, o polvo de plátano deshidratado

Plátanos, crudo

El pan, plátano, preparado a partir de la receta, hecho con margarina

CAMPBELL Soup Company, V8 SPLASH Bebidas de zumo, plátano de la fresa

CAMPBELL Soup Company, V8 SPLASH batidos, plátano de la fresa

CAMPBELL Soup Company, Zumos V8 V. FUSION, plátano de la fresa


Quiero "Plátanos, en bruto" que venir primero porque "banana" es la primera palabra en el resultado, y yo quiero "Campbell Soup ..." para llegar a la última porque "banana" es la última palabra.

Sé que puedo utilizar strpos () para encontrar la posición, pero ¿cómo puedo poner todo junto?

¿Fue útil?

Solución

Esto se puede hacer fácilmente en MySQL.


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

título representan columna de la tabla de MySQL.

Otros consejos

Esto implicará un usort innecesariamente compleja o algo similar en PHP, mejor que hacerlo en la consulta, por ejemplo:

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

También se puede seleccionar INSTR(titles, 'banana') as firstIndex y el orden por ese valor, ASC. Esto devolverá el índice del índice primero situado de la aguja dentro de la pajar. Etiqueta en una cláusula WHERE que omite cualquier cosa que no es LIKE '%banana%' y que debe ser fijado:

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

Si no consigue que los datos de una consulta SQL, puede ordenar que el uso de usort y < a href = "http://php.net/strpos" rel = "nofollow noreferrer"> stripos ; algo como esto debería hacer:

$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);

es decir. usted está aquí ordenando con usted poseen función definida, que compara la posición (caso-insensibles) de "Banana" en las dos cadenas que recibe como parámetros.


Y obtendrá este tipo de salida para la matriz, una vez clasificadas:

$ /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"
}


Por supuesto, si usted consigue que los datos de una consulta SQL, podría ser más fácil de hacer algunos cálculos additionnal en el lado de SQL ...

si lo que desea emular strpos:

select col, locate('banana', col) as pos from t
order by pos < 1, pos, length(col)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top