while / foreach /一次获得3个结果?

时间:2010-09-16 20:00:03

标签: php

我试图一次从mysql数据库中获取3个结果(所以它一次显示3个)

所以它会像

$sql = mysql_query("SELECT * FROM table");
while ($row = mysql_fetch_array($sql)) {
    print $row['username'];
    print $row['username2'];
    print $row['username3'];
}

但$ row ['username'];和$ row ['username2']; $行[ 'USERNAME3'];将只是mysql表中的第一个第二和第三个结果。

然后它会重复和$ row ['username'];和$ row ['username2'];和$ row ['username3'];将是第4,第5和第6等等。

我知道如何做到这一点吗?

7 个答案:

答案 0 :(得分:0)

要显示三个结果,您可以这样做:

$sql = mysql_query("SELECT * FROM table");

$count = 0;
while ($row = mysql_fetch_array($sql)) {
    $count++;
    if ($count === 3) break; 
    print $row['username'];
}

或者如果您愿意,可以在查询中指定LIMIT子句以仅获取三个记录:

$sql = mysql_query("SELECT * FROM table LIMIT 3");

while ($row = mysql_fetch_array($sql)) {
    print $row['username'];
}

使用LIMIT子句,您还可以指定要返回的起始索引和行数:

$sql = mysql_query("SELECT * FROM table LIMIT 4, 3");

上述查询将从第4行开始返回3行。

答案 1 :(得分:0)

您可以使用限制条款

select * from table limit 1, 3

然后是接下来的3,

select * from table limit 4, 3

(您可能想要查找语法,我可能会向后退订单)

答案 2 :(得分:0)

$sql = mysql_query("SELECT * FROM table");

$count = 0;
while ($row = mysql_fetch_array($sql)) {
    $count++;
    if ($count % 3 == 0) print "<br/>" /* or any other way you want to break up the data */
    print $row['username'];
}

答案 3 :(得分:0)

我认为你的逻辑是有缺陷的,史蒂文。

为什么在循环的一次迭代中需要访问三条记录?这听起来像是一个不合逻辑的问题。我的赌注是你以错误的方式看问题。你能为这个问题提供一个背景吗?

答案 4 :(得分:0)

虽然听起来你的方法听起来有点不合逻辑,但我想你可以将结果存储在一个数组中,一次输入三个用户名,然后输出数组中的数据。像这样:

$q = mysql_query("SELECT * FROM table");
$usernames = array();
while($d = mysql_fetch_assoc($q)) {
   $usernames[] = $d['username'];
   if(count($usernames) = 3) {
      sprintf('user 1: %s, user 2: %s, user 3: %s<br />', $usernames[0], $usernames[1], $usernames[3]);
      $usernames = array();
   }
}

以上假设我正确理解了您的问题。我仍然不太清楚你为什么要使用这种方法 - 你可能最好重新思考这背后的逻辑。

答案 5 :(得分:0)

你可以这样做:

function mysql_fetch_n_rows($rs, $n)
{
  $rows = array();
  while ($n-- && ($row = mysql_fetch_array($rs)))
  {
    $rows[] = $row;
  }

  return $rows;
}

$rs = mysql_query("SELECT * FROM table");

while ($rows = mysql_fetch_n_rows($rs, 3))
{
    print $rows[0]['username'];
    print $rows[1]['username'];
    print $rows[2]['username'];
}

(免责声明:显然你需要验证你实际上有3行。你可能只得到一两行。)

但我怀疑你真的需要上面的代码。通常,像其他一些答案所表明的那样($i % 3)要容易得多。我肯定会发布这个答案,因为我认为这是最好的通用解决方案,但仅作为创建通用功能的一个例子,而不是试图在{{1}内硬编码这种类型的解决方案}循环。

答案 6 :(得分:0)

与模板一起使用的5美分 我喜欢使用模板

<?
$data = dbgetall("SELECT username FROM table");
$data = array_chunk($data,3);
?>
<table>
<? foreach ($data as $chunk): ?>
 <tr>
<? foreach ($chunk as $row): ?>
  <td><?=$row['username']?></td>
<? endforeach ?>
 </tr>
<? endforeach ?>
</table>