Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] tabla dinamica

Estas en el tema de tabla dinamica en el foro de PHP en Foros del Web. Hola estoy queriendo hacer una table dinamica donde la primera columna tiene que unir a los valores iguales y el resto no ya que son ...
  #1 (permalink)  
Antiguo 26/12/2013, 12:41
 
Fecha de Ingreso: octubre-2013
Mensajes: 56
Antigüedad: 10 años, 6 meses
Puntos: 1
tabla dinamica

Hola estoy queriendo hacer una table dinamica donde la primera columna tiene que unir a los valores iguales y el resto no ya que son distintos.

No logro unir los valore sde la primera columna y no se si es una cuestion de la sintaxis de PHP o el problema esta en la query.
le paso el codigo a ver si me pueden dar una mano.

CODIGO

echo"<tr>";
$sql = "SELECT cuotas, coeficientes FROM coeficientes WHERE cia='".$_GET['cia']."' AND banco ='cualquiera' order by CUOTAS asc";
$res = mysqli_query($conn, $sql);
while($fila = mysqli_fetch_assoc($res)){;
echo"<td>".$fila ['cuotas']."</td>";
while ($i < $col) {
$i ++;
echo"<td>".$fila ['coeficientes']."</td>";
}
$i = 0;
echo"</tr>";
}

RESULTADO

01 1.0000 1.0000
01 1.0000 1.0000
03 1.0665 1.0665
03 1.0667 1.0667
06 1.1259 1.1259
06 1.1265 1.1265


Lo que intento hacer es que quede asi

01 1.0000 1.0000
03 1.0665 1.0667
06 1.1259 1.1265


Desde ya muchisimas gracias por sus consejos.

Marcelo
  #2 (permalink)  
Antiguo 26/12/2013, 13:47
Avatar de enlinea777  
Fecha de Ingreso: mayo-2008
Ubicación: frente al pc
Mensajes: 1.830
Antigüedad: 15 años, 10 meses
Puntos: 127
Respuesta: tabla dinamica

tienes que hacer un "group by" en la query para sacar todos los datos
  #3 (permalink)  
Antiguo 27/12/2013, 06:15
 
Fecha de Ingreso: octubre-2013
Mensajes: 56
Antigüedad: 10 años, 6 meses
Puntos: 1
Respuesta: tabla dinamica

Hola enlinea777 lo probe pero me agrupa todos los datos y me muestra siempre el mismo.
$sql = "SELECT cuotas,coeficientes FROM coeficientes WHERE cia='".$_GET['cia']."' AND banco ='cualquiera' group by cuotas order by CUOTAS asc";

01 1.0000 1.0000
03 1.0665 1.0665
06 1.1259 1.1259


Saludos MArcelo
  #4 (permalink)  
Antiguo 27/12/2013, 06:31
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: tabla dinamica

Es que lo que quieres no saldrá con una consulta simple:
Código PHP:
Ver original
  1. $sql = "SELECT cuotas, MAX(coeficientes) coeficientes";
  2. $sql .= "FROM coeficientes  ";
  3. $sql .= "WHERE cia='".$_GET['cia']."' AND banco ='cualquiera'  ";
  4. $sql .= "GROUP BY cuotas  ";
  5. $sql .= "ORDER BY cuotas ASC";
Nota: No pongas columnas con los mismos nombres de las tablas a las que pertenecen. En SQL pueden generar errores indetectables.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 27/12/2013, 09:07
 
Fecha de Ingreso: octubre-2013
Mensajes: 56
Antigüedad: 10 años, 6 meses
Puntos: 1
Respuesta: tabla dinamica

hola gnzsoloyo
Muchas gracias por tu consejo, ya cambie el nombre de la columna

No funciono el MAX ya que me muestra siempre el valor mayor y los valores de los coeficientes no son iguales para todas las columnas.

Saludos
MArcelo
  #6 (permalink)  
Antiguo 27/12/2013, 09:12
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: tabla dinamica

Una pregunta, entonces.
Esto es lo que tienes:
RESULTADO
Cita:
01 1.0000 1.0000
01 1.0000 1.0000
03 1.0665 1.0665
03 1.0667 1.0667
06 1.1259 1.1259
06 1.1265 1.1265
y lo que quieres es:
Cita:
01 1.0000 1.0000
03 1.0665 1.0667
06 1.1259 1.1265
¿Este segundo par de datos, son dos datos en una misma columna, o hay un sólo dato en ella?
Porque es imposible ordenar sea ascendente o descendente si no hay un unico dominio en esa columna.
Aclarame cómo tienes guardados esos datos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 27/12/2013, 10:03
 
Fecha de Ingreso: octubre-2013
Mensajes: 56
Antigüedad: 10 años, 6 meses
Puntos: 1
Respuesta: tabla dinamica

Capaz no me explique ya que falta el encabezado

la tabla tendria que quedar asi.

AX VI
01 1.0000 1.0000
03 1.0665 1.0667
06 1.1259 1.1265


Los datos los tengo guardados asi.

CODIGO TC NOMBRE BANCO CUOTAS COEFICIENTE
LY AX American Express Cualquiera 01 1.0000
LY AX American Express Cualquiera 06 1.1259
LY AX American Express Cualquiera 03 1.0665
LY VI Visa Cualquiera 03 1.0667
LY VI Visa Cualquiera 01 1.0000
LY VI Visa Cualquiera 06 1.1265


Te agradesco muchisimo tu ayuda.

Saludos
MArcelo
  #8 (permalink)  
Antiguo 27/12/2013, 10:18
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: tabla dinamica

OK. Ahora se entiende mejor...
Lo que necesitas obtener es lo que se denomina "tabla inversa".
Bueno, eso tiene dos soluciones, pero la más simple de todas es programática.

Me explico.
La consulta sólo puede obtener los datos puros de la tabla que tienes. MySQL, que es el DBMS que usas, no tiene funciones ni clausulas que puedan crear tablas inversas. Para lograrlo deberías hacer una consulta con N JOINs, uno por cada tarjeta que exista registrada. Es un tipo de consulta sumamente ineficiente, y no es recomendable en este DBMS (Si usases otro, la cosa cambia).
A nivel de SQL, la cosa sería mas o menos así:
Código MySQL:
Ver original
  1. SELECT tj1.cuota, tj1.coeficiente Visa, tj2.coeficiente  AmeX
  2. FROM coeficientes tj1 INNER JOIN coeficientes tj2 ON tj1.cuota = tj2.cuota
  3. WHERE tj1.tc = 'VI' AND tj2.tc = 'AX';
  4. ORDER BY  tj1.cuota;
Obviamente si hay más tarjetas, se necesitan más INNER JOIN con otros alias tanto en las tablas como en las columnas.
Si además una de las TJ no tiene todos los tipos de cuota, o tiene más, ya esta query no es funcional y hay que hacer uso del LEFT JOIN y funciones de conversion de null (IFNULL()) para evitar datos nulos.
Se complica mucho.


A nivel programático lo que haces es recorrer el resultado de esa query base y vas armando las columnas en función de los datos que encuentras. No es muy corto, pero se puede hacer.

En ese caso la query es simplemente:
Código MySQL:
Ver original
  1. SELECT cuota, tj, coeficiente
  2. FROM coeficientes
  3. ORDER BY tj, cuota
y la construccion visual de la tabla la haces por PHP.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 27/12/2013 a las 12:19
  #9 (permalink)  
Antiguo 27/12/2013, 12:05
 
Fecha de Ingreso: octubre-2013
Mensajes: 56
Antigüedad: 10 años, 6 meses
Puntos: 1
Respuesta: tabla dinamica

Muchisimas gracias, voy por ese camino.
Si lo resuelvo te paso el codigo por privado.
Saludos

Etiquetas: dinamica, frameworks-y-php-orientado-a-objetos, 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 22:58.