I am trying to display MySQL query results dynamically in a table. Based on the query, the table will have a maximum of 3 columns and 15 rows. I would like to have the results display as follows:

Record 1 Record 16 Record 31
Record 2 Record 17 Record 32

Record 15 Record 30 Record 45

If the query returns less than 16 records, everything should display in the first column; if more than 15 but less than 31 - 2 columns, et al.

I am fairly new to PHP and am trying to learn all I can as I go along. Any books, websites, or online classes you can suggest to increase my knowledge of PHP would be greatly appreciated.



9 Years
Discussion Span
Last Post by schizoman

ok i will give you an example:

$host=""; // Host name
$username=""; // Mysql username
$password=""; // Mysql password
$db_name=""; // Database name
$tbl_name=""; // Table name

// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");  
 $user_result = "select * from table;";
$qry = mysql_query($user_result) OR die(mysql_error());
$user_array = mysql_fetch_assoc($qry);
echo "<center>";
echo "<table CELLPADDING=10 border =1 >";
echo "<tr>";
echo "<td>".$user_array['field 1']."</td>";
echo "<td>".$user_array['field 2']."</td>";
echo "<td>".$user_array['field 3']."</td>";
echo "</tr>";
echo "</table>";


hope that helps you


Thank you for your suggestion. However, I don't think I explained what I'm trying to do well enough. I am trying to display one field from my database in this table. The results from the one field should display in a table vertically (max. 15 rows) then start a new column. I've written some code (using a while loop and count function) that will display it horizontally but everything that I try to get it to display vertically ends up duplicating the same record.


try using the SQL limit instruction.for example:

SELECT * FROM 'users' LIMIT 0 10;
SELECT * FROM 'users' LIMIT 10 10;

the first number tell you the index in which the SQL DB needs to start from and the second number tell you the number of rows to be selected.
I think you can easily figure it out.
Also, try using MySQL manual if you use MySQL as your DBMS.

Good luck.


You will of course have to implement a paging mechanism if your results exceed rows*columns and you will need to get all of the items into a single array before you generate the <tr> and <td> elements. The following example code shows how you can generate the table you want

$data = array("a","b","c","d","e","f","g","h","i","j");
$rows = 4;
echo "<table>";
for ($row=0; $row < $rows; $row++){
    echo "<tr>";
    for ($itemIndex=$row; $itemIndex < $itemCount; $itemIndex+=$rows){
        echo "<td>".$data[$itemIndex]."</td>";
echo "</table>";

Here's a quick and dirty way to do it with nested "for" loops:

$strQS="select [I]field[/I] from [I]table[/I] order by [I]index[/I]";
$refItems=mysql_query($strQS) or die (mysql_error());
<th colspan={$cols}>
Your Header Here
	echo "<tr>\n";
		echo "<td>".$tableData[$x][$y][[I]field[/I]]."</td>\n";
	echo "</tr>\n";
echo "</table>"
This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.