sql限制无法显示第一行[重复]
Posted
技术标签:
【中文标题】sql限制无法显示第一行[重复]【英文标题】:sql limit fail to display first row [duplicate] 【发布时间】:2020-04-02 09:33:11 【问题描述】:我有一个如下所示的 SQL 查询:
`SELECT * FROM table LIMIT 5;`
其实我用的是mysql的免费员工数据库,查询是:
`SELECT * FROM employees LIMIT 5;`
现在我有一个 php 函数,它将选定的数据输出到一个 html 表中,如下所示:
function outputTable($query, $link)
//Verbindung zur Datenbank inkludieren
require_once('./config.php');
//auffangen der Rückgabe
$erg = mysqli_query($link, $query);
//bestimmt Anzahl der Spalten (aocol = Amount Of COLumns)
//counts the amount of columns
$aocol = count(mysqli_fetch_array($erg, MYSQLI_NUM));
//table head
$head = "";
for($x = 0; $x < $aocol; $x++)
//legt alle Informationen des Feldes $x in $finfo, darunter auch den Namen der Spalte.
//puts all information of the field $x in $finfo, also the name of the column
$finfo = mysqli_fetch_field_direct($erg, $x);
//Schreibt die Kopfzeile der Tabelle
//writes the table's head
$head .= "<th>".$finfo->name."</th>";
//only if style.css included-->irrelevant
echo '<div class="table"><table id="table">';
//output of table's head
echo "<th>$head</th>";
//output of table's body --> here must be the bug, I think
while($zeile = mysqli_fetch_array($erg, MYSQLI_NUM))
//new tablerow
echo "<tr>";
//filling the row
foreach($zeile as $feld)
//format for numbers
$ra = preg_match('/^\d+$/',$feld) ? ' align="right"' : '';
//displaying table data
echo "<td$ra>".$feld."</td>";
//closing table and layout
echo '</table></div>';
我的问题是写了第 2-5 行,但缺少第一行... 如果你执行查询,你应该得到这样的结果:
| emp_no |
| 10001 |
| 10002 |
| 10003 |
| 10004 |
| 10005 |
我实际上只得到了 emp_nos 10002-10005。
【问题讨论】:
我得到:You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'order by emp_no' at line 1
我的错误,错误的方式.. SELECT * FROM table ORDER BY emp_no LIMIT 5;
因为它是:'Select * from table order by emp_no limit 5;'但它仍然是相同的结果,所以第一行丢失了
【参考方案1】:
当你打电话时......
$aocol = count(mysqli_fetch_array($erg, MYSQLI_NUM));
这实际上是读取第一行,因此它不再可用于以下循环。
我建议重组你的代码,以便在主读取循环中构建头部,但前提是 $head
为空...
//table head
$head = "";
//only if style.css included-->irrelevant
echo '<div class="table"><table id="table">';
//output of table's body --> here must be the bug, I think
while($zeile = mysqli_fetch_array($erg, MYSQLI_NUM))
if ( empty ($head) )
//counts the amount of columns
$aocol = count($zeile);
for($x = 0; $x < $aocol; $x++)
//legt alle Informationen des Feldes $x in $finfo, darunter auch den Namen der Spalte.
//puts all information of the field $x in $finfo, also the name of the column
$finfo = mysqli_fetch_field_direct($erg, $x);
//Schreibt die Kopfzeile der Tabelle
//writes the table's head
$head .= "<th>".$finfo->name."</th>";
//output of table's head
echo "<th>$head</th>";
//new tablerow
echo "<tr>";
//filling the row
foreach($zeile as $feld)
//format for numbers
$ra = preg_match('/^\d+$/',$feld) ? ' align="right"' : '';
//displaying table data
echo "<td$ra>".$feld."</td>";
另外,如果您将 MYSQLI_NUM
更改为 MYSQLI_ASSOC
,那么您可以只使用键名作为列名并删除额外的 API 调用...
while($zeile = mysqli_fetch_array($erg, MYSQLI_ASSOC))
if ( empty ($head) )
foreach ( $zeile as $name => $value )
$head .= "<th>".$name."</th>";
//output of table's head
echo "<th>$head</th>";
【讨论】:
【参考方案2】:mysqli_fetch_array
已经以数组的形式获取结果。
我怀疑它在 fetch 之后移动了 mysql 游标,这就是您缺少第一行的原因。
一个更简单的解决方案可能是这样的:
function outputTable($query, $link)
require_once('./config.php');
$erg = mysqli_query($link, $query);
$result = mysqli_fetch_array($erg, MYSQLI_ASSOC);
$aocol = count($result);
$head = "";
foreach($result as $row)
$head .= '<th>' . $row['name'] . '</th>';
echo '<div class="table"><table id="table">';
echo "<th>$head</th>";
foreach($result as $row)
echo '<tr>';
foreach($row as $field)
$ra = preg_match('/^\d+$/',$field) ? ' align="right"' : '';
echo "<td$ra>".$field."</td>";
echo '</table></div>';
【讨论】:
【参考方案3】:您应该使用这样的查询来获取所有结果:
$query = "SELECT * FROM table ORDER BY `id` LIMIT 0, 5";
这只会为您提供前 5 个结果,以便您可以做出更多结果:
$query = "SELECT * FROM table ORDER BY `id` LIMIT 5, 100";
或者这个:
$query = "SELECT * FROM table ORDER BY `id` DESC LIMIT 5";
【讨论】:
其实我觉得整个循环里面有某种bug,但是我找不到 试一试我的最后一个查询示例,告诉我你得到了什么回报以上是关于sql限制无法显示第一行[重复]的主要内容,如果未能解决你的问题,请参考以下文章
Android_5_学习《第一行代码》的使用摄像头和相册无法显示图片问题解决
git 无法暂存文件,将所有文件显示为重复,但字符大小写不是问题
无法在 Angularjs 重复指令中显示 WEBAPI 数据