Foros del Web » Programando para Internet » PHP »

Aporte - Union de dos tablas en Array y ordenado cronologicamente

Estas en el tema de Aporte - Union de dos tablas en Array y ordenado cronologicamente en el foro de PHP en Foros del Web. Bueno, hace un par de dias necesitaba hacer un feed que se alimentaba de dos tablas diferentes con distintos registros. Con la ayuda de varios ...
  #1 (permalink)  
Antiguo 07/09/2011, 17:45
Avatar de hackcrack  
Fecha de Ingreso: abril-2011
Mensajes: 331
Antigüedad: 13 años
Puntos: 9
Sonrisa Aporte - Union de dos tablas en Array y ordenado cronologicamente

Bueno, hace un par de dias necesitaba hacer un feed que se alimentaba de dos tablas diferentes con distintos registros. Con la ayuda de varios en el foro, especialmente andresdzphp y Patriarka pude terminar el codigo, y se los comparto a ustedes, la comunidad que siempre me ayuda a aprender cada dia un poco mas del mundo de la programacion.

Código PHP:
<?php 
$query 
"SELECT * FROM `noticias`";
$resultado mysql_query ($query$dbConn);
$entrada = array();
$i=0;
while (
$row mysql_fetch_array($resultado)) {
$entrada[$i]['nombre']=$row[nombre];
$entrada[$i]['fecha']=$row[fecha];
$entrada[$i]['texto']=$row[texto];
$i++;
}
$query "SELECT * FROM `noticias2`"// hacemos la consulta  a la segunda tabla
$resultado mysql_query ($query$dbConn);
$i=9999999// esto para que no se repita con la otra tabla
while ($row mysql_fetch_array($resultado)) {
$entrada[$i]['nombre']=$row[nombre2]; // ejemplo de registro con diferente nombre
$entrada[$i]['fecha']=$row[fecha];
$entrada[$i]['texto']=$row[texto];
$i++;
}
function 
ordenar_fecha($a,$b)
{
    return 
strcmp($b["fecha"],$a["fecha"]);
}
 
usort($entrada'ordenar_fecha');  // lo ordenamos del mas nuevo al mas viejo cronologicamente

while (list($clave$valor) = each($entrada)) {
echo 
$valor[nombre]."<br/>";
echo 
$valor[fecha]."<br/>";
echo 
$valor[texto]."<br/>";
 }

?>
Ese es el codigo en si, seguramente le falte optimizar y se podran hacer algunas cosas de mejor manera, pero eso se los dejo a los expertos
__________________
Los mejores juegos de PC gratis en ******
  #2 (permalink)  
Antiguo 07/09/2011, 18:19
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Aporte - Union de dos tablas en Array y ordenado cronologicamente

de nada hombre, que bueno que aprendiste a recorrer los arrays. En mi opinión personal no me gusta usar list each para recorrer ese bucle. Me parece más claro hacer un foreach:

Código PHP:
Ver original
  1. foreach ($entrada as $clave => $valor) {
  2.     echo $valor['nombre'] . "<br/>";
  3.     echo $valor['fecha'] . "<br/>";
  4.     echo $valor['texto'] . "<br/>";
  5. }

Otra cosa no olvides colocar las comillas a las claves de los arrays

Cita:
Siempre deben usarse comillas alrededor de un índice de array tipo cadena literal. Por ejemplo, $foo['bar'] es correcto, mientras que $foo[bar] no lo es.
Esto porque PHP lo primero que hace es comprobar que exista la constante bar y lo que estás usando es una clave con un valor string.

Otra cosa que no le encuentro sentido es a esta línea:

Código PHP:
Ver original
  1. $i=9999999; // esto para que no se repita con la otra tabla

Si estás agregando elementos al mismo array nunca se van a repetir. Si la primera tabla termina en 200 la clave va a seguir con 201 cuando sigas agregando datos en el otro bucle. Yo quitaría eso.

Gracias por compartir el código, si se me ocurre algo más te cuento. Saludos
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #3 (permalink)  
Antiguo 07/09/2011, 21:44
Avatar de hackcrack  
Fecha de Ingreso: abril-2011
Mensajes: 331
Antigüedad: 13 años
Puntos: 9
Respuesta: Aporte - Union de dos tablas en Array y ordenado cronologicamente

Gracias por todos los consejos :D

Y eso del valor de la clave mira que probe como vos decis y no funciono, probe de dos formas, asi:

Código PHP:
while ($row mysql_fetch_array($resultado)) {
$entrada[]['nombre']=$row[nombre];
$entrada[]['fecha']=$row[fecha];
$entrada[]['descripcion']=$row[descripcion];
}
// Y LA OTRA CONSULTA
while ($row mysql_fetch_array($resultado)) {
$entrada[]['nombre']=$row[nombre];
$entrada[]['fecha']=$row[fecha2];
$entrada[]['descripcion']=$row[descripcion];

eso no me funciono, entonces probe asi tbien

Código PHP:
$i=0;
while (
$row mysql_fetch_array($resultado)) {
$entrada[$i]['nombre']=$row[nombre];
$entrada[$i]['fecha']=$row[fecha];
$entrada[$i]['descripcion']=$row[descripcion];
$i++;
}
// Y LA OTRA CONSULTA
while ($row mysql_fetch_array($resultado)) {
$entrada[]['nombre']=$row[nombre2];
$entrada[]['fecha']=$row[fecha];
$entrada[]['descripcion']=$row[descripcion];

tampoco funciono
__________________
Los mejores juegos de PC gratis en ******
  #4 (permalink)  
Antiguo 07/09/2011, 22:38
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Aporte - Union de dos tablas en Array y ordenado cronologicamente

Me referia a esto

Código PHP:
Ver original
  1. $entrada[$i]['nombre'] = $row[nombre];

en vez de hacer eso, hacer esto:

Código PHP:
Ver original
  1. $entrada[$i]['nombre'] = $row['nombre'];
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #5 (permalink)  
Antiguo 08/09/2011, 05:37
Avatar de hackcrack  
Fecha de Ingreso: abril-2011
Mensajes: 331
Antigüedad: 13 años
Puntos: 9
Respuesta: Aporte - Union de dos tablas en Array y ordenado cronologicamente

Ahh solo eliminar la linea $i=9999999; entonces.
__________________
Los mejores juegos de PC gratis en ******

Etiquetas: mysql, ordenado, registro, tabla, tablas, union
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

SíEste tema le ha gustado a 1 personas




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