PHP MYSQL - Ayuda de explosión
Pregunta
Saludos,
Tengo datos almacenados en mysql con delimitador ", " en 1 mesa. También tengo filas y columnas almacenadas en la base de datos. Ahora tengo que generar los datos usando filas y columnas almacenadas en la base de datos para dibujar la tabla.
Las filas y el número de columna son entradas del usuario, por lo que pueden variar.
Digamos que hay un número 3 en la columna y 3 en las filas.
Necesito hacerlo como mostrar como,
|___d1__|___d2__|___d3__|
|___d4__|___d5__|___d6__|
|___d7__|___d8__|___d9__|
Donde d1-d9 serían los datos almacenados en la base de datos mysql con delimitador ", " en una mesa.
Gracias por ayudarme.
Solución
Puede convertir los valores separados por comas de su columna de datos en una matriz utilizando la función explotar ():
<?php
$result = mysql_query('SELECT rows, columns, data from table_name where id=1');
$record = mysql_fetch_assoc($result);
$rows = $record['rows'];
$columns = $record['columns'];
$data = explode(',' , $record['data']);
if (sizeof($data) != $rows * $columns) die('invalid data');
?>
Para mostrar la tabla, necesita dos bucles for anidados:
<table>
<?php for ($row = 0; $row < $rows; $row++) : ?>
<tr>
<?php for ($column = 0; $column < $columns; $column++) : ?>
<td>
<?php echo $data[$row * $columns + $column]; ?>
</td>
<?php endfor ?>
</tr>
<?php endfor ?>
</table>
Otros consejos
Esto no lo ayudará a resolver este mismo problema, pero un buen consejo: nunca escriba valores separados por comas en un campo de base de datos. No puede consultar de manera sensata la información almacenada de esta manera, y el código de su aplicación estará abarrotado de conversiones feas. En su lugar, use una tabla separada con una referencia a la tabla principal y una fila por valor.
suponiendo que el usuario establezca el tamaño de la tabla para 2 filas y 3 columnas y realice alguna entrada para 6 celdas, los datos que irán a la base de datos serán
2,3, d1, d2, d3, d4, d5, d6
cuando vayas a buscar datos de la celda y hagas explotar en una cadena obtenida obtendrás una matriz de 1 dimensión con 8 elementos
$ r = $ e [0] filas
$ c = $ e [1] cols
$ e [2-7] datos
- wrtite openning < tabla > etiqueta
- dos bucles, uno en otro,
- el primero generará código para el inicio de la fila
- wrtite openning < tr > etiqueta
- dentro de uno generará código para la fila.
- escribir apertura < td > etiqueta
- escribir datos $ e [1 + posición calculada desde el interior y el exterior de los bucles]
- escribir cierre < td > etiqueta
- final del bucle interior
- wrtite cierre < tr > etiqueta
- fin del bucle exterior
- wrtite cierre < tabla > etiqueta
Debería darte la idea