I am trying to convert the following SQL query into MySQL but wondering if there is a equivalent of ROW_NUMBER() in MySQL.
SELECT TOP (@NumResults) * FROM (
SELECT
ROW_NUMBER() OVER (
ORDER BY
CASE WHEN @OrderBy = 'PRODUCT' AND @OrderByDirection = 'D' THEN product_name END DESC,
CASE WHEN @OrderBy = 'PRODUCT' AND @OrderByDirection = 'A' THEN product_name END,
CASE WHEN @OrderBy = 'CATEGORY' AND @OrderByDirection = 'D' THEN category_name END DESC,
CASE WHEN @OrderBy = 'CATEGORY' AND @OrderByDirection = 'A' THEN category_name END,
CASE WHEN @OrderBy = 'MANUFACTURER' AND @OrderByDirection = 'D' THEN manufacturer_name END DESC,
CASE WHEN @OrderBy = 'MANUFACTURER' AND @OrderByDirection = 'A' THEN manufacturer_name END, product_name
)AS RowNumber, *
FROM #TempDataFeedTable
WHERE manufacturer_name like @ManufacturerName
) _temp
WHERE RowNumber > (@Index - 1)
Should I use self-join ? I've already Googled and looked at all other solutions in stack overflow, but since my sql query has multiple select statements I am having trouble getting the correct result. Can anyone help ?
This is what I've tried so far, but I don't get same results as that of SQL database.
SET @row_number:=0;
SELECT * FROM (
SELECT (@row_number:=@row_number + 1) As RowNumber, importeddatafeedid, product_name, categoryid,manufacturerid, image_url, link_url, upc, mpn, description, msrp, manufacturer_name FROM
TempDataFeedTable
WHERE manufacturer_name like p_ManufacturerName
ORDER BY
CASE WHEN p_OrderBy = 'PRODUCT' AND p_OrderByDirection = 'D' THEN product_name END DESC,
CASE WHEN p_OrderBy = 'PRODUCT' AND p_OrderByDirection = 'A' THEN product_name END,
CASE WHEN p_OrderBy = 'CATEGORY' AND p_OrderByDirection = 'D' THEN category_name END DESC,
CASE WHEN p_OrderBy = 'CATEGORY' AND p_OrderByDirection = 'A' THEN category_name END,
CASE WHEN p_OrderBy = 'MANUFACTURER' AND p_OrderByDirection = 'D' THEN manufacturer_name END DESC,
CASE WHEN p_OrderBy = 'MANUFACTURER' AND p_OrderByDirection = 'A' THEN manufacturer_name END, product_name
)
_temp
WHERE RowNumber > (p_Index - 1)
LIMIT 0,10;