Muchos portales suelen mostrar sus noticias en dos columnas centrales, principalmente por cusestión de diseño, por lo que en este artículo mostramos una de las maneras de mostrar los resultados de una consulta a la base de datos en dos columnas, mediante el uso de la cláusula LIMIT de MySQL y la función SPRINTF de PHP.
El resultado tendría la siguiente estructura (siguiendo la petición que leí en un foro):
columna1 | columna2
1 | 4
2 | 5
3 | 6
En primer lugar, lo obvio, nos conectamos a la BD:
<?php
$hostname = "localhost";
$database = "dos_columnas";
$username = "root";$password = "";
$connection = mysql_pconnect($hostname, $username, $password) or trigger_error(mysql_error(), E_USER_ERROR);
?>
Luego, lo relevante, realizamos la consulta:
<?php
mysql_select_db($database, $connection);
$consulta = "SELECT columnas FROM tabla";
$limite_columna1 = sprintf("%s LIMIT %d, %d", $consulta, 0, 6); $resultados1 = mysql_query($limite_columna1, $connection) or die(mysql_error()); $columna1 = mysql_fetch_assoc($resultados1);
$limite_columna2 = sprintf("%s LIMIT %d, %d", $consulta, 6, 6);
$resultados2 = mysql_query($limite_columna2, $connection) or die(mysql_error());
$columna2 = mysql_fetch_assoc($resultados2);
?>
Como vemos, esta es una típica consulta a la Base de Datos con la diferencia que creamos un par de variables más: $limite_columna1 y $limite_columna2. En estas variables almacenamos los resultados de la función sprintf de PHP ¿Y para qué? Pues, mediante esta función damos formato a la array que nos devuelve la consulta, indicándole dos patrones que deben mostrarse:
%s: que el argumento sea tratado como una cadena y se presente como tal.
%d: que el argumento sea tratado como un entero y se presente con notación decimal
Pero algo muy importante es que gracias a esta función podemos emplear la cláusula LIMIT con la que indicamos que registros de la variable $consulta vamos a mostrar, para este ejemplo, 6 registros empezando por el registro 0, en la variable $limite_columna1 y 6 registros empezando por el registro 6, en la variable $limite_columna2.
Finalmente creamos el html con el bucle do … while, o el de su preferencia, para mostrar los resultados:
<table><tr><td>
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td>materia1</td>
</tr>
<?php do { ?>
<tr>
<td><?php echo $columna1['titulo']; ?></td>
</tr> <?php } while ($columna1 = mysql_fetch_assoc($resultados1)); ?>
</table>
</td>
<td><table border="0" cellpadding="0" cellspacing="0">
<tr>
<td>materia1</td>
</tr>
<?php do { ?>
<tr>
<td><?php echo $columna2['titulo']; ?></td>
</tr>
<?php } while ($columna2 = mysql_fetch_assoc($resultados2)); ?></table>
</td></tr></table>
Muy simple, verdad?
Es muy bueno pero a un no responden mis dudas .Quiero que me ayuden con esta consulta:Tengo una pagina donde se insertara un dato, tengo atrapar ese dato para realizar un select a la base datos y mostrar los resultados.Por favor ayudenme. Chao
Seria bueno programar de forma mas estructurada...
Usa la clausula INSERT de MySQL. Por ejemplo lee este tutorial de ajax, aunque es mucho más avanzado de lo que quieres, te puede servir. Saludos.
El codigo esta muy bueno pero quesiera saber como hago para hacer una paginacion con estas 2 columnas de datos .......de antemano gracias ..........
hola Estuardo por curiosidad no has encontrado alguna forma de paginar este codigosaludos gracias
hey...ya logre meterlo para que trabaje a dos columnas centrando y justificando los resultados...alguien sabe como metele a que trabaje con el de paginacion???ahi va el codigo que hice///////////////////////////////////////////////////<p> <?php//conexion a la base de datos$connect=mysql_connect("","user","user") or die ("No se puede conectar a la base de datos");//asegurarnos que usamos la base que queremosmysql_select_db("base", $connect);//la consulta para doble clumna//mysql_select_db($database, $connection);$query="SELECT aviso FROM aviso"; $limite_columna1=sprintf("%s LIMIT %d,%d",$query,0,15); $resultados1=mysql_query($limite_columna1,$connect) or die(mysql_error()); $columna1=mysql_fetch_assoc($resultados1); $limite_columna2=sprintf("%s LIMIT %d, %d",$query,15,15);$resultados2=mysql_query($limite_columna2, $connect) or die(mysql_error()); $columna2 = mysql_fetch_assoc($resultados2);?></p><table width="693" height="303" border="1"> <!--DWLayoutTable--><tr><td width="337" height="297" valign="top"><div align="justify"> <?php //insertado1 while ($row = mysql_fetch_array($resultados1)) { extract ($row); echo $aviso; echo "<br>"; echo "<CENTER>- - - - - - - - - - - - - - - - - - -</CENTER>"; //echo "<br>"; }?></div> <div align="justify"></div></td><td width="8"> </td><td width="333" height="297" valign="top"><div align="justify"> <?php//insertado2 while ($row = mysql_fetch_array($resultados2)) { extract ($row); echo $aviso; echo "<br>"; echo "<CENTER>- - - - - - - - - - - - - - - - - - -</CENTER>"; //echo "<br>"; }?></div> </td> </tr></table>////////////////////////////////////////////////////////////////////////////////////////////
Hola Elmonp, suscr
como hago para que las columnas muestren todos los registros de la busqueda en dos filas es decir si tengo 50 registros los muestre en dos columnas de 25
gracias por el aporte .peo tengo una duda de que manera haces que los resultados de la consulta a la base de datos se dividan en 2 y lo que queda lo pasas a una tabla que esta al lado de la primera..bueno aun n entiendo muy bien como tratas los resultados de la consulta ,....lo que yo necesito hacer es que los resultados aparezcan en 3 columnas y uego paginar los resultados para que aparezcan 9 por pagina ..bueno espero su ayuda ..Saludos Bal
creo que empiezo a entender ....entonces l que haces es darle un echo a las 6 primeros elemntos de la contulta comenzando or el 6 luego a los 6 siguientes comenzando por el 6 ..no es asi????..pero eso es siempre y cuando tegas una cantidas pre definida de registros en la base de datos pero si estos fueran mayorees o menores ...como trataria los resutados esta funcion..?¨?????'
Buen método, gracias por compartirlo.