[Ayuda]Mostrar datos CONCRETOS de mysql con PHP

Mensajes
1
Puntuación de reacción
0
Hola a todos, tengo una pequeño problema a la hora de mostrar datos en mi web.Resumen: como crear columna fecha iterando todos los elementos de la columna hora(varchar(6)) en el orden predefinido? Algún experto en SQL? Gracias por vuestro tiempo. Un saludo
 
Última edición:
Mensajes
1
Puntuación de reacción
0
Puedes dar más detalle? No capto bien lo que buscas.
Perdona la ambigüedad, dejo imagen ilustrativa.
87tEN.jpg

Lo que necesito es la ultima columna date, para poder ordenar las horas por días. Tengo dos campos en la tabla: hora y nombre (varchar ambos). He convertido la columna hour a datatime, pero según me han comentado la idea es hacer una columna dias datetime que empiece con el dia de hoy por ejemplo y se incremente con los datos de la columna hora (cambiando esta columna a int previamente). Alguna sugerencia?. Gracias por tu tiempo. Un saludo
 
Mensajes
16
Puntuación de reacción
0
Bueno amigo, basado en lo que comprendí, si estoy en lo correcto de lo que busca:

PHP:
$registros = array(
	array(
		'hora' => '00:45',
		'date' => ''
		),
	array(
		'hora' => '17:45',
		'date' => ''
		),
	array(
		'hora' => '00:45',
		'date' => ''
		),
	array(
		'hora' => '14:45',
		'date' => ''
		),
	array(
		'hora' => '02:30',
		'date' => ''
		),
	array(
		'hora' => '12:00',
		'date' => ''
		),
	array(
		'hora' => '01:00',
		'date' => ''
		),
	array(
		'hora' => '05:15',
		'date' => ''
		),
	array(
		'hora' => '09:00',
		'date' => ''
		),
	array(
		'hora' => '23:00',
		'date' => ''
		),
	array(
		'hora' => '00:00',
		'date' => ''
		),
	array(
		'hora' => '23:59',
		'date' => ''
		),
	array(
		'hora' => '03:00',
		'date' => ''
		)

	);

$data = array();

$hora_anterior = 0;
$dia = date('d-m-Y');// parqa fecha
// si solo es el correlativo (comentar línea anterior y descomentar linea siguiente)
//$dia = 0;

foreach($registros as $registro):

	if($registro['hora'] < $hora_anterior):
		$dia = date('d-m-Y', strtotime($dia . "+1 Day")); //fecha
                // si solo es el correlativo (comentar línea anterior y descomentar linea siguiente)
                // $dia++;
	endif;

	$hora_anterior = date('H',strtotime($registro['hora']));

	
	 array_push($data, array($registro['hora'] => $dia));
	
endforeach;

var_dump($data);

Obtenemos esto:
PHP:
array (size=13)
  0 => 
    array (size=1)
      '00:45' => string '23-04-2015' (length=10)
  1 => 
    array (size=1)
      '17:45' => string '23-04-2015' (length=10)
  2 => 
    array (size=1)
      '00:45' => string '24-04-2015' (length=10)
  3 => 
    array (size=1)
      '14:45' => string '24-04-2015' (length=10)
  4 => 
    array (size=1)
      '02:30' => string '25-04-2015' (length=10)
  5 => 
    array (size=1)
      '12:00' => string '25-04-2015' (length=10)
  6 => 
    array (size=1)
      '01:00' => string '26-04-2015' (length=10)
  7 => 
    array (size=1)
      '05:15' => string '26-04-2015' (length=10)
  8 => 
    array (size=1)
      '09:00' => string '26-04-2015' (length=10)
  9 => 
    array (size=1)
      '23:00' => string '26-04-2015' (length=10)
  10 => 
    array (size=1)
      '00:00' => string '27-04-2015' (length=10)
  11 => 
    array (size=1)
      '23:59' => string '27-04-2015' (length=10)
  12 => 
    array (size=1)
      '03:00' => string '28-04-2015' (length=10)


Espero estar apuntando en la dirección correcta.

Sino, aquí seguiré.

P.S.: Fíjese que no alteré nada en la base de datos, como ud. comenta de "cambiar a int el campo hora".
 
Mensajes
1
Puntuación de reacción
0
Bueno amigo, basado en lo que comprendí, si estoy en lo correcto de lo que busca:

PHP:
$registros = array(
	array(
		'hora' => '00:45',
		'date' => ''
		),
	array(
		'hora' => '17:45',
		'date' => ''
		),
	array(
		'hora' => '00:45',
		'date' => ''
		),
	array(
		'hora' => '14:45',
		'date' => ''
		),
	array(
		'hora' => '02:30',
		'date' => ''
		),
	array(
		'hora' => '12:00',
		'date' => ''
		),
	array(
		'hora' => '01:00',
		'date' => ''
		),
	array(
		'hora' => '05:15',
		'date' => ''
		),
	array(
		'hora' => '09:00',
		'date' => ''
		),
	array(
		'hora' => '23:00',
		'date' => ''
		),
	array(
		'hora' => '00:00',
		'date' => ''
		),
	array(
		'hora' => '23:59',
		'date' => ''
		),
	array(
		'hora' => '03:00',
		'date' => ''
		)

	);

$data = array();

$hora_anterior = 0;
$dia = date('d-m-Y');// parqa fecha
// si solo es el correlativo (comentar línea anterior y descomentar linea siguiente)
//$dia = 0;

foreach($registros as $registro):

	if($registro['hora'] < $hora_anterior):
		$dia = date('d-m-Y', strtotime($dia . "+1 Day")); //fecha
                // si solo es el correlativo (comentar línea anterior y descomentar linea siguiente)
                // $dia++;
	endif;

	$hora_anterior = date('H',strtotime($registro['hora']));

	
	 array_push($data, array($registro['hora'] => $dia));
	
endforeach;

var_dump($data);

Obtenemos esto:
PHP:
array (size=13)
  0 => 
    array (size=1)
      '00:45' => string '23-04-2015' (length=10)
  1 => 
    array (size=1)
      '17:45' => string '23-04-2015' (length=10)
  2 => 
    array (size=1)
      '00:45' => string '24-04-2015' (length=10)
  3 => 
    array (size=1)
      '14:45' => string '24-04-2015' (length=10)
  4 => 
    array (size=1)
      '02:30' => string '25-04-2015' (length=10)
  5 => 
    array (size=1)
      '12:00' => string '25-04-2015' (length=10)
  6 => 
    array (size=1)
      '01:00' => string '26-04-2015' (length=10)
  7 => 
    array (size=1)
      '05:15' => string '26-04-2015' (length=10)
  8 => 
    array (size=1)
      '09:00' => string '26-04-2015' (length=10)
  9 => 
    array (size=1)
      '23:00' => string '26-04-2015' (length=10)
  10 => 
    array (size=1)
      '00:00' => string '27-04-2015' (length=10)
  11 => 
    array (size=1)
      '23:59' => string '27-04-2015' (length=10)
  12 => 
    array (size=1)
      '03:00' => string '28-04-2015' (length=10)


Espero estar apuntando en la dirección correcta.

Sino, aquí seguiré.

P.S.: Fíjese que no alteré nada en la base de datos, como ud. comenta de "cambiar a int el campo hora".

Solo puedo decir mil gracias porque has sido el único que de momento me ha orientado hacia algún código útil ;).El array que creas al principio, puedo crearlo con un SELECT en SQL para seleccionar todas las horas por el orden de ID? es decir, no esas horas que pones ahí, y no tener que meter a mano cada hora no? Después con la variable $data puedo asignar los valores a una columna en una tabla de mysql? un saludo y gracias de nuevo amigo
 
Mensajes
16
Puntuación de reacción
0
Exactamente. Ese array simula la data de un query.

Que bueno que te ha servido. No te creas desde que leí estaba maquinando solo que no tenía el tiempo para sentarme jejeje.

Un saludo y estoy a la orden. Me comentas como te funciona cuando lo apliques.
 
Mensajes
1
Puntuación de reacción
0
Exactamente. Ese array simula la data de un query.

Que bueno que te ha servido. No te creas desde que leí estaba maquinando solo que no tenía el tiempo para sentarme jejeje.

Un saludo y estoy a la orden. Me comentas como te funciona cuando lo apliques.

Aquí te pongo el código que estoy intentando ejecutar y me muestra array(0) { } :S. El tema de subirlo a una columna de la tabla en mysql seria con un query ALTER TABLE...? perdona pero estoy bastante verde en consultas sql desde php. Gracias de nuevo. Un saludo
You must reply before you can see the hidden data contained here.
 
Mensajes
16
Puntuación de reacción
0
Aquí te pongo el código que estoy intentando ejecutar y me muestra array(0) { } :S. El tema de subirlo a una columna de la tabla en mysql seria con un query ALTER TABLE...? perdona pero estoy bastante verde en consultas sql desde php. Gracias de nuevo. Un saludo
You must reply before you can see the hidden data contained here.
You must reply before you can see the hidden data contained here.
 
Mensajes
1
Puntuación de reacción
0
Mira tienes que usar mysql_fetch_assoc: intenta algo asi:
PHP:
$conulta = mysql_query("SELECT * hora FROM `TABLA`") or trigger_error(mysql_error()); 

while($rows = mysql_fetch_Assoc($consulta)):
   // Aqui armas el array $registros con una estructura similar a la del ejemplo
endwhile;

//para que veas como viene la data pura usa esto:
var_dump($rows);

//... resto del código


Adicionalmente te comento que mysql_query está obsoleto ya, desde php 5

Un saludo

Gracias de nuevo amigo, lo intenté con el siguiente código sin éxito:
$consulta = mysql_query("SELECT * hora FROM `TABLE`") or trigger_error(mysql_error());
while($rows = mysql_fetch_Assoc($consulta)):
$registros = array(array('hora' => $rows['hora'], 'date' => '' ));
endwhile;

$data = registros();
$hora_anterior = 0;
$dia = 0;

foreach($registros as $registro):

if($registro['hora'] < $hora_anterior):
$dia++;
endif;

$hora_anterior = date('H',strtotime($registro['hora']));


array_push($data, array($registro['hora'] => $dia));

endforeach;

echo $data;
Me muestra pantalla en blanco, creo que es el por el array registros, pero no se muy bien donde esta el fallo, algún consejo? :) mis dies para ti. Un saludo
 
Arriba