Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] ordenar Array en consulta mysql

Estas en el tema de ordenar Array en consulta mysql en el foro de PHP en Foros del Web. Hola a todos, haber si alguien me puede ayudar. Tengo 2 tablas. En una guardo solamente los ids de los items y las fechas que ...
  #1 (permalink)  
Antiguo 13/02/2013, 04:35
 
Fecha de Ingreso: noviembre-2012
Mensajes: 76
Antigüedad: 11 años, 5 meses
Puntos: 3
ordenar Array en consulta mysql

Hola a todos, haber si alguien me puede ayudar.

Tengo 2 tablas.
En una guardo solamente los ids de los items y las fechas que han sido visitados esos items.
La otra contiene el id del item y el resto de informacion del item.

Entonces extraigo de la tabla1 los ids de los items almacenandolos en un array:
Código:
$consulta = mysql_query("select * from itemsVistos WHERE idItem!='" . $idItem . "' ORDER BY fecha DESC");
while($fila = mysql_fetch_array($consulta))
{
     $idItems[$i] = $fila["idItem"];
     $i++;
}
Ahora ya tengo los Ids de los Items almacenados en un array ordenados por fecha reciente y los preparo para la siguiente consulta:
Código:
$idItems = implode(",",$idItems);
De esta forma quedaria memorizado en $idItems algo como esto:
12,20,8,45

Bién, pues cuando hago la siguiente consulta:
Código:
$consulta = mysql_query("select * from items WHERE fecha<='" . $ahora . "' AND id IN ($idItems)");
while($fila = mysql_fetch_array($consulta))
{
     $id= $fila["id"];
     echo"$id<br>";
}
Muestra: 45,20,12,8
en vez de: 12,20,8,45

¿Como puedo conseguir que respete el orden del array?
Haber si alguien puede ayudarme!!!
  #2 (permalink)  
Antiguo 13/02/2013, 06:34
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: ordenar Array en consulta mysql

Código MySQL:
Ver original
  1. SELECT i.idItem,...listaCamposDe i...., Sbc.fechaV
  2. FROM items i INNER JOIN
  3.      (SELECT iv.idItem,
  4.                    MAX(iv.fecha) fechaV
  5.       FROM itemsVistos
  6.       WHERE iv.idItem<>'" . $idItem . "'
  7.       GROUP BY iv.idItem) as Sbc
  8. ON i.idItem=Sbc.idItem
  9. ORDER BY Sbc.fechaV DESC

Esto te da lo que buscas en una sola consulta y ordenado como lo quieres...incluso mejor por que con el MAX()... GROUP BY solo verás la ultima fecha de visita de cada Item.

fecha<='" . $ahora . "'

Puedes tener items con fecha futura?

Si es así no hace falta que uses una variable

fecha<=NOW() es más eficiente....


Código MySQL:
Ver original
  1. SELECT i.idItem,...listaCamposDe i...., Sbc.fechaV
  2. FROM items i INNER JOIN
  3.      (SELECT iv.idItem,
  4.                    MAX(iv.fecha) fechaV
  5.       FROM itemsVistos
  6.       WHERE iv.idItem<>'" . $idItem . "'
  7.       GROUP BY iv.idItem) as Sbc
  8. ON i.idItem=Sbc.idItem
  9. WHERE i.fecha<=NOW()
  10. ORDER BY Sbc.fechaV DESC

(si hay items futuros)

Por cierto si iditem es numérico puedes poner tranquilamente

...WHERE iv.idItem<>" . $idItem . "...
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 13/02/2013 a las 06:43
  #3 (permalink)  
Antiguo 13/02/2013, 06:46
Avatar de rodno  
Fecha de Ingreso: enero-2009
Ubicación: En algun lugar de Cuba
Mensajes: 426
Antigüedad: 15 años, 3 meses
Puntos: 43
Respuesta: ordenar Array en consulta mysql

Buenas,

Tambien, puedes hacerlo asi:

Código SQL:
Ver original
  1. SELECT items.* FROM items INNER JOIN itemsVistos ON items.iditem = itemsVistos.iditem
  2. WHERE items.idItem<>'" . $idItem . "'  AND fitemsVistos.fechaV <=NOW() ORDER BY itemsVistos.fechaV DESC

Saludos
__________________
"No te preocupes si no funciona bien. Si todo lo hiciera, no tendrías trabajo."
"El problema no es no saber, sino no saber quién sabe"
..::Con Karma se piensa mejor::..

Última edición por rodno; 13/02/2013 a las 06:48 Razón: Poniendo HIGHLIGHT
  #4 (permalink)  
Antiguo 13/02/2013, 11:46
 
Fecha de Ingreso: noviembre-2012
Mensajes: 76
Antigüedad: 11 años, 5 meses
Puntos: 3
Respuesta: ordenar Array en consulta mysql

Gracias a los 2 por responder.
Me toca mirarme un poco INNER JOIN y poner en practica lo que me habeis dicho.
Doy el tema por finalizado.
Muchas gracias!

Etiquetas: mysql, select, sql, tabla
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 09:24.