Ordenar por valores en un arreglo en Mysql
Quiero ordenar manualmente elementos de una tabla. El contexto es que tengo diferentes elementos listados agrupados por tipo de artículo y luego ordenados por el id para que los números de los artículos se presenten como:
Tipo de artículo 1 – 4109
Tipo de artículo 1 – 1342
Tipo de artículo 1 – 3193
Tipo de artículo 2 – 6971
Tipo de artículo 2 – 0484
La cadena SQL se muestra a continuación:
$sql = “SELECT * FROM “‘.$tabla.'” WHERE modelo = “‘.$modelo.'” ORDER BY item, id ASC”;
En lugar de ordenar los números de los artículos en base al id ASC, quiero ordenarlos según una matriz definida, como:
$sortItem1 = [1342, 4109, 3193];
$sortItem2 = [0484, 6971];
Los elementos deben aparecer agrupados por artículo y los números de los artículos deben ordenarse según las matrices $sortItem1 y $sortItem2. El resultado debería ser:
Tipo de artículo 1 - 1342
Tipo de artículo 1 - 4109
Tipo de artículo 1 - 3193
Tipo de artículo 2 - 0484
Tipo de artículo 2 - 6971
No creo que sea posible utilizar el siguiente código, pero quiero que se ordene de la siguiente manera:
ORDER BY item, $sortItem1, $sortItem2
¿Cuál es la mejor solución para esto?
davy.ai
Una posible solución para ordenar manualmente elementos de una tabla es usar la función usort() de PHP para ordenar un array de elementos de acuerdo a una función de comparación personalizada que tenga en cuenta el orden de clasificación predefinido para cada tipo de elemento.
Primero, podemos obtener los elementos de la base de datos utilizando la consulta SQL mostrada arriba y almacenar los resultados en un array. Luego, podemos definir el orden de clasificación para cada tipo de elemento como un array asociativo, donde las claves son los tipos de elemento y los valores son arrays que contienen el orden deseado para cada tipo de elemento.
A continuación, podemos definir una función de comparación personalizada que tome dos elementos y los compare según su tipo y número de artículo, utilizando el orden de clasificación predefinido para cada tipo de elemento. La función debería devolver un valor negativo si el primer elemento debe ir antes del segundo elemento, un valor positivo si el segundo elemento debe ir antes del primer elemento o cero si los elementos son iguales.
Finalmente, podemos usar la función usort() para ordenar el array de elementos utilizando la función de comparación personalizada, lo cual producirá el resultado deseado.
Aquí hay un ejemplo de código que demuestra este enfoque:
Este código debería producir el siguiente resultado:
Es importante tener en cuenta que este enfoque asume que los tipos de elementos en la base de datos ya están agrupados y solo necesitan ser ordenados dentro de cada grupo. Si los elementos no están agrupados por tipo de elemento, entonces puede ser necesario agregar código adicional para agruparlos antes de ordenarlos.