开发者

Mysql fetch array, table results

i'm pretty new to this and not sure how should i do it,

I've got a database with a column called "names"

how can i make it display in so?

  <tr>
  <td width="270px">Henry</td>
  <td width="270px">Jeffrey</td>
  <td width="270px">Hansel</td>
  </tr>

  <tr>
  <td width="270px">Michelle</td>
  <td width="270px">Jackson</td>
  <td width="270px">Ivan</td>
  </tr>

I only know how i should do it i开发者_运维问答f the records goes one after another vertically.

  $result = mysql_query('SELECT * FROM member');

  while($row = mysql_fetch_array($result))
  {
  echo'
  <tr>
  <td width="270px">'.$row['names'].'</td>
  <td width="270px">Jeffrey</td>
  <td width="270px">Hansel</td>
  </tr>';

Kinda stucked here...

Sorry i forgot to put this.

what i want is that it should loop the tags along. So i can have a 3 column table with infinite rows.

what bout this one? What if i want this to loop instead?

<tr>
<td><img src="images/ava/A.png" /></td>
<td>A</td>
<td width="2px" rowspan="3"></td>
<td><img src="images/ava/B.png" /></td>
<td>B</td>
</tr>


<tr>
<td>A</td>
<td>B</td>
</tr>


$row will update on each iteration of the loop:

$result = mysql_query('SELECT * FROM member');

echo '<tr>';

for($i = 0; $row = mysql_fetch_array($result); $i = ($i+1)%3){
    echo '<td width="270px">'.$row['names'].'</td>';
    if($i == 2)
        echo '</tr><tr>';
}

echo '</tr>';


$result = mysql_query('SELECT * FROM member');
  echo'<tr>'
  while($row = mysql_fetch_array($result))
  {

  echo '<td width="270px">'.$row['names'].'</td>';
  }

  echo '</tr>';


$result = mysql_query('SELECT * FROM member');

echo '<tr>;

while($row = mysql_fetch_array($result))
{

    echo '<td width="270px">'.$row['names'].'</td>';
}

echo '</tr>';


Lets say you have an array of the names called $names, then you could do what you wanted with code that looks something like this:

<tr>
<?php

foreach($names as $name) {
    print "<td>$name</td>";
}
?>
</tr>

That would put all the names on the same row.

In order to start a new row say, every 3 names, you could put an if statement in the for loop like this:

// assume we have these variables available.
$row_number;
$max_cols = 3;

// this goes at the top of the foreach
if($row_number % $max_cols == 0) {
    print '</tr><tr>';
}


You know accomplish this by assigning the row count before you start the variable and few flags to know initialized loop or started/ended loop.

$i = 1;
$initFlag = false;
$flag = "closed";
while($row = mysql_fetch_array($result)) {
    if($i%3 == 0) $initFlag = false;
    if($flag == "closed" && ($i == 1 || $i % 3 == 1)) { 
        echo "<tr>"; $flag = "started"; $initFlag = true; 
    }

    echo '<td width="270px">'.$row['names'].'</td>';

    if(!initFlag && $flag == "started" && $i % 3 ==0) { 
        echo "</tr>"; $flag = "closed"; 
    }


    $i++;
}


So most of these answers are going for the kludge. First, if all you want is the name in your resultset, then only ask for it. So rather than going with:

$result = mysql_query('SELECT * FROM member');

Instead go with:

$result = mysql_query('SELECT names FROM member');

Also, everyone seems to be ignoring the three column request, and that can be satisfied using a modulo to tell when to break the rows. We'll do a little magic to make sure you always close the row tag.

$row_count = 0;
while($row = mysql_fetch_array($result))
  {
  if( $row_count % 3 == 0 )
    {
       echo '<tr>';
    }
    echo '<td width="270px">'.$row['names'].'</td>';
  if( $row_count % 3 == 0 )
    {
       echo '</tr>';
    }
  $row_count++; 
  }

I don't want to get too picky about your schema, but if you have a choice, it's better to name the table a plural like members rather than member, since you have a collection of rows, each one representing one 'member'. And unless your members have multiple names that column could probably best be called 'name' instead.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜