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
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?
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)