MySQL过度从SQL转换为MySQL

时间:2015-02-18 14:30:52

标签: mysql sql datatables

任何人都可以帮我将这个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

2 个答案:

答案 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列,则可以使用limitoffset

答案 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