Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Consulta ordenada con condicional

Estas en el tema de Consulta ordenada con condicional en el foro de Mysql en Foros del Web. Buen día. Tengo una duda al respecto de una Consulta ordenada con su condicional . La consulta la hago a través de una función que ...
  #1 (permalink)  
Antiguo 02/03/2010, 23:00
Avatar de pepejaguar  
Fecha de Ingreso: enero-2005
Ubicación: Guatemala
Mensajes: 76
Antigüedad: 19 años, 3 meses
Puntos: 0
Pregunta Consulta ordenada con condicional

Buen día.

Tengo una duda al respecto de una Consulta ordenada con su condicional.

La consulta la hago a través de una función que está planteada, a grosso modo, de la siguiente forma

Código PHP:
function categoria($id)
{
$cat mysql_query("SELECT nombre FROM categorias WHERE id = '$id' ORDER BY nombre ASC ");
while (
$categoria mysql_fetch_array($cat)) {
echo = 
$categoria['nombre']."<br />";
}

La idea es que busque en la tabla categorías y ordene en forma ascendente. El problema está en que no hace este ordenamiento.

Creo que la causa es la forma en la que llega el valor de $id, este es un array que contiene varios números, quizá con esta información, pueda dar mas luces para resolver el problema.

Supongamos que la tabla es:

id -- nombre

1 -- nombreC
2 -- nombreA
3 -- nombreB
4 -- nombreE
5 -- nombreD

El valor de $id puede estar formado por varios números diferentes, por ejemplo 1,2,5 ó 1,3,2 ó 5,3,1, ó 4,3,2,1 etc, la combinación es diferente cada vez, porque es el resultado de otra consulta.

Si fuera el array 1,2,5 el resultado de la función debiera ser:

nombreA
nombreC
nombreD

Si fuera el array 5,3,1 el resultado debiera ser:

nombreB
nombreC
nombreD

Pero comentaba anteriormente, si se realiza la consulta pero no se realiza el ordenamiento, supongo que ha de ser porque cada valor ingresa a la función de forma individual, es decir solo 5, solo 3, solo 1 entonces como es solo un valor único no se ordena.

¿Hay alguna forma de poder corregir esto? ¿Me he explicado bien?

Gracias por la ayuda, saludos.
  #2 (permalink)  
Antiguo 03/03/2010, 03:44
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Consulta ordenada con condicional

Creo que para eso debes usar ORDER BY FIELD, e introducir los valores de array, que van separados por coma, de esta manera. Pido disculpas por introducir variables PHP. No debes poner código de programación en este foro, salvo el código de base de datos. Si el campo se llama id, y el array $id. Los datos de $id deben cargarse de esta forma 5,3,4, es decir, separados por coma.

Código MySQL:
Ver original
  1. SELECT nombre FROM categorias WHERE id IN ('$id') ORDER BY FIELD(id,'$id')

No he probado nada
  #3 (permalink)  
Antiguo 03/03/2010, 04:24
 
Fecha de Ingreso: agosto-2008
Mensajes: 7
Antigüedad: 15 años, 8 meses
Puntos: 1
Respuesta: Consulta ordenada con condicional

Cita:
Iniciado por jurena Ver Mensaje
Creo que para eso debes usar ORDER BY FIELD, e introducir los valores de array, que van separados por coma, de esta manera. Pido disculpas por introducir variables PHP. No debes poner código de programación en este foro, salvo el código de base de datos. Si el campo se llama id, y el array $id. Los datos de $id deben cargarse de esta forma 5,3,4, es decir, separados por coma.

Código MySQL:
Ver original
  1. SELECT nombre FROM categorias WHERE id IN ('$id') ORDER BY FIELD(id,'$id')

No he probado nada
la solución del IN es correcta pero me deja intrigado su ORDER BY FIELD(id,'$id')

creo que los paréntesis sobran, ya que si desea ordenar por otro campo mas se debería ser de la siguiente manera

Código MySQL:
Ver original
  1. SELECT nombre FROM categorias WHERE id IN ('$id') ORDER BY FIELD1,FIELD2
  #4 (permalink)  
Antiguo 03/03/2010, 11:37
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Consulta ordenada con condicional

Creo que axidugar tiene razón. Yo entendí mal, a saber, que quería ordenar según el valor del id, es decir, primero los id 1, si hay varios id 1, etc. (para eso el order by field, que ordena por el valor de campos y de acuerdo con el orden en que le presentes los datos de ese campo). Pero, en realidad, parece querer ordenar sólo por nombre

SELECT nombre FROM categorias WHERE id IN ('$id') ORDER BY nombre ASC
  #5 (permalink)  
Antiguo 03/03/2010, 18:54
Avatar de pepejaguar  
Fecha de Ingreso: enero-2005
Ubicación: Guatemala
Mensajes: 76
Antigüedad: 19 años, 3 meses
Puntos: 0
De acuerdo Respuesta: Consulta ordenada con condicional

Si, es solo por nombre el ordenamiento.

Gracias por la ayuda, no utilicé lo que me indicaron, pero si me sirvió mucho para llegar a la solución.

Jurena, no entendí lo de no publicar código PHP y solo de base de datos. Publiqué la función completa, para que se pudiera apreciar todo el entorno que rodea la consulta.

La forma en la que lo solucioné fue:

Código MySQL:
Ver original
  1. SELECT nombre FROM categorias WHERE id IN (SELECT DISTINCT categoria FROM datos) ORDER BY nombre ASC

SELECT nombre FROM categorias WHERE id IN (SELECT DISTINCT categoria FROM datos) ORDER BY nombre ASC

El problema radicaba en que el valor del $id no es del tipo 1,3,5, es decir una serie separada por comas, sino que son valores individuales porque son el resultado de otra consulta de otra función, pero todo se resolvió gracias a una subconsulta.

Gracias por la ayuda.

Saludos

Etiquetas: condicional, ordenada
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:51.