任何人都可以帮我将这个SQL语句转换为MySQL。 它用于服务器端分页的jQuery数据表。 我尝试过使用
@curRank := @curRank + 1 AS rank
而不是
row_number() OVER (ORDER BY item_id asc) AS RowNumber
但我一直收到语法错误
CREATE TEMPORARY TABLE IF NOT EXISTS temp1 AS (SELECT * INTO temp1 FROM item where BLOCKED='0');
SELECT *
FROM
(SELECT row_number() OVER (ORDER BY item_id asc) AS RowNumber , *
FROM
(SELECT (SELECT count(temp1.NO)
FROM
temp1) AS TotalRows
, ( SELECT count(NO) FROM temp1 ) AS TotalDisplayRows ,*
FROM
temp1 ) RawResults) Results
WHERE
RowNumber BETWEEN 1 AND 10
感谢您的帮助,以下是查询。但是,如何将TotalRows和TotalDisplayRows返回到数据中?我不得不手动添加item_id和说明。我输出的列是RowNumber,Item_Id,Description。我还需要TotalRows和TotalDisplayRows
设置@rn:= 0;
SELECT *
FROM (SELECT (@rn := @rn + 1) AS RowNumber,item_id,description
FROM
(SELECT (SELECT count(item.item_id)
FROM
item) AS TotalRows
, ( SELECT count(item_id) FROM item ) AS TotalDisplayRows ,item_id,description
FROM
item ) RawResults
) Results
WHERE
RowNumber BETWEEN 1 AND 10
答案 0 :(得分:1)
您可以使用变量:
CREATE TEMPORARY TABLE IF NOT EXISTS temp1 AS (SELECT * INTO temp1 FROM item where BLOCKED='0');
SELECT *
FROM (SELECT (@rn := @rn + 1) AS RowNumber , *
FROM (SELECT (SELECT count(temp1.NO)
FROM temp1
) AS TotalRows,
(SELECT count(NO) FROM temp1 ) AS TotalDisplayRows ,*
FROM temp1
) RawResults CROSS JOIN
(SELECT @rn := 0) vars
ORDER BY item_id
) Results
WHERE RowNumber BETWEEN 1 AND 10
如果您实际上不需要表格中的RowNumber
列,则可以使用limit
和offset
。
答案 1 :(得分:0)
SELECT * FROM (SELECT (@rn := @rn + 1) AS RowNumber,item_id,description
FROM
(SELECT (SELECT count(item.item_id)
FROM
item) AS TotalRows
, ( SELECT count(item_id) FROM item ) AS TotalDisplayRows ,item_id,description
FROM
item ) RawResults
) Results
WHERE RowNumber BETWEEN 1 AND 10