我有一个在数据库操场MySQL上成功运行的语句。SQL它查询并返回我的 location_values 表中的每 10 行,而不管 ID 中的任何间隙。
它看起来像这样:
MySQL
set @row:=-1;
SELECT location_values.*
FROM
location_values
INNER JOIN
(
SELECT id
FROM
(
SELECT @row:=@row+1 AS rownum, id
FROM
(
SELECT id FROM location_values ORDER BY id
) AS sorted
) as ranked
WHERE rownum % 10 = 0
) AS subset
ON subset.id = location_values.id
我有一个在数据库操场MySQL上成功运行的语句。SQL它查询并返回我的 location_values 表中的每 10 行,而不管 ID 中的任何间隙。
它看起来像这样:
MySQL
set @row:=-1;
SELECT location_values.*
FROM
location_values
INNER JOIN
(
SELECT id
FROM
(
SELECT @row:=@row+1 AS rownum, id
FROM
(
SELECT id FROM location_values ORDER BY id
) AS sorted
) as ranked
WHERE rownum % 10 = 0
) AS subset
ON subset.id = location_values.id
工作 db-fiddle
问题:我想转换上面的这个语句并在PHP查询中运行它,但是我在这样做时遇到了问题。
按照目前的情况,我的自定义PHP函数继续打印整个表,而不是按照 MySQL 语句每 10 行打印一次。我怀疑是由于不解释set @row:=-1;而@row:=@row+1在PHP.
我的 PHP 函数
function get_incidents() {
$row = -1;
$query = query("
SELECT location_values.*
FROM
location_values
INNER JOIN
(
SELECT id
FROM
(
SELECT $row + 1 AS rownum, id
FROM
(
SELECT id FROM location_values ORDER BY id
) AS sorted
) as ranked
WHERE rownum % 10 = 0
) AS subset
ON subset.id = location_values.id");
confirm($query); //passes in the global $connection;
while ($row = fetch_array($query)) {
$incidents = <<<DELIMETER
<tr>
<td>{$row['id']}</td>
<td>{$row['name']}</td>
<td>{$row['lat']}</td>
<td>{$row['lng']}</td>
</tr>
DELIMETER;
echo $incidents;
} // end of while loop
} // end of function
我对 PHP 很陌生,对于如何最好地重构我的 PHP 函数以实现我的目标,即返回每 10 行而不考虑 ID 中的空白,我将不胜感激。
一只萌萌小番薯
尚方宝剑之说
开满天机
随时随地看视频慕课网APP