[SOLUCIONADO] Multiples filas dependiendo de un dato de un campo

Hola.

Soy nuevo en toba y queria saber si esto lo puedo resolver desde el editor o no, como podria hacerlo?

tengo los datos en una tabla de esta forma:

cantidad prod
2 peras
3 manzanas

los campos son cantidad y prod.

tengo que obtner cantidad de filas dependiendo de la cantidad de producto,

osea Fizualizar de esta forma en un cuadro.

peras
peras
manzanas
manzanas
manzanas

Desde ya muchas gracias.

Hola Sandra,

en toba no existe nada parecido a eso, creo que lo que podrias hacer es obtener los datos del servidor y luego recorrerlos para generar las filas extra que necesitas hasta completar la cantidad de registros que deberias tener. Algo similar quizas podrias realizar directamente en el servidor de bd pero tene en cuenta que vas a estar transmitiendo mucha mas informacion por la red tambien. En php lo podrias hacer en el metodo de configuracion del cuadro y seria un par de ciclos sencillos, algo asi:


 $resultado = array();
  foreach($datos as $valores) {
       foreach($valores['cantidad'] as $veces) {
                $resultado[] = $valores:
       }
  }

Saludos

Hola Ricardo

En la clase consulta tengo los metodos de esta forma:

function prueba()
{	$consultasql = "Select * FROM prueba;";
	return consultar_fuente($consultasql);
}
function prueba2(){
	$datos= consultas::prueba();
	$resultado=array();
	foreach($datos as $valores)
	{
		foreach($valores['cantidad'] as $veces)
		{			
			$resultado[] = $veces;
		}		
	}
	return $datos;
}

en el cuadro:

function conf__cuadro(toba_ei_cuadro $cuadro)
{
	$datos = consultas::prueba2();
	$cuadro->set_datos($datos);
}

Al previsualizar el proyecto me devuelve los valores (Select * from prueba) y este error :

Invalid argument supplied for foreach()

muchas gracias por la respuesta.

Hola, me parece que las fallas son de tipeo en el código de prueba2.

function prueba2(){ $datos= consultas::prueba(); $resultado=array(); foreach($datos as $valores) { foreach($valores['cantidad'] as $veces) { $resultado[] = $veces; } } return $datos; }
El valor que devolvés debe ser $resultado (estás devolviendo $datos). Y en $resultados tendrías que guardar $valores (estás guardando $veces).

De todas formas yo hubiera hecho algo así (aún estoy peleandola con PHP!!!, es decir, desconozco si en este caso el foreach retorna el mismo resultado que el for…) :


<?php...
   function prueba2(){
      $datos= consultas::prueba();
      $resultado=array();
      foreach($datos as $valores)
      {
          for ($i = 1; $i <= $valores['cantidad']; $i++) {
               $resultado[] = $valores['prod'];
          }
      }
      return $resultado;
   }

No tengo posibilidades de probar lo que te digo… pero espero que te sirva!

@Sandra:

Lo que te pase ayer no era codigo funcional, sino mas bien la idea de como podias hacer para repetir los valores en varias filas. La implementacion actual de esa idea es la que elaboro mas detalladamente Martin en la segunda parte de su respuesta. Tene en cuenta que la columna ‘cantidad’ siempre debe tener un valor entero, de modo que si permitis ‘nulls’ en la base de datos vas a tener que usar ‘coalesce’ para recuperar al menos un cero en esos casos.

@Martin:
Gracias por el aporte :slight_smile:

Saludos a ambos

Hola…

Finalmente quedo asi:

<?php... function prueba2(){ $datos= consultas::prueba(); $resultado=array(); foreach($datos as $valores) { for ($i = 0; $i <= $valores['cantidad']; $i++) { $resultado[] = $valores; } } return $resultado; } Muchisimas gracias a todos... saludos...

Barbaro :slight_smile: