T.R.'s point 3 probably is the part that seems intimidating until you've done it. Actually it's very simple.
It breaks down like so:
Output the <table> tag
Repeatedly output the rows. This is easy, and I'll illustrate it in a moment.
Output the </table> tag.
Outputting the rows is done by repeatedly calling the mysql_fetch_whatever function until it returns FALSE, and then printing the table cells with variables embedded. T.R. likes mysql_fetch_array; I like mysql_fetch_object. The difference is trivial, one of notational preference. Use the one that seems clear to you.
Here is an example, condensed from some code that I wrote for my BBS software.
// I am using a query function that lets me
// pass the database name, and I also
// am using a variable for the table name.
// Most of the time you won't do that.
$result = mysql_db_query($db,"select * from $prattle_users order by uid");
// Now we output the top table tag
echo "<table>\n";
// This is the loop that repeatedly fetches
// and processes the data that was returned
// by our database query.
// I am using mysql_fetch_object() out of
// personal preference. It requires that I refer
// to variables using object notation:
// $user->username, $user->uid, et cetera.
while ($user = mysql_fetch_object($result))
{
echo "\n<tr>"; // new table row
echo "<td> $user->uid </td><td>$user->username ($user->firstname $user->lastname) </td>";
echo "<td>", $user->email_public ? "<a href=\"mailto:$user->email\">$user->email</a>" :
"Email is private", "</td>";
// that's the row, now end it
echo "</tr>";
}
// The above code is called repeatedly until the
// well runs dry. When it's finished, we
// close up the table...
echo "\n</table>";
// and that's the whole banana.
If you look closely at my code, you'll discover two things. One is that it's mostly comments, and there's very little code involved. And the other is that this is mostly just HTML with variables embedded. Once you learn the basics of PHP syntax, the rest is fairly straightforward.