2015-12-30 2 views
0

Я пробую этот запрос, чтобы получить номер строки в выбранных строках, но результат получается как 23,56,78, .... мне нужно получить 1,2,3 для каждого выбранного ряд. пожалуйста, помогите мнеКак получить номер строки в запросе select

SET @row=0; 
SELECT `table1`.`col1`,`table1`.`col2`,@row:[email protected]+1 
FROM `table1` 
LEFT OUTER JOIN `table2` ON `table1`.`col1` = `table2`.`col5` 
WHERE `table2`.`col5` IS NOT NULL 
GROUP BY `col1` ORDER BY `table1`.`col7` DESC LIMIT 0,10 
+0

это то, что вы можете сделать на переднем конце вообще? Я использовал временную таблицу, чтобы выполнить это, хотя это может не соответствовать вашим потребностям. У MySQL нет функции рангов, о которой я знаю. – Clay

+0

Вы хотите заказать для выбранных строк. –

+0

Почему вы используете 'LEFT JOIN', если вам не нужны нулевые строки? Используйте 'INNER JOIN', и эти строки не будут в итоге в первую очередь. – Barmar

ответ

4

Переместить запрос с пунктом ORDER BY в подзапрос.

SET @row = 0; 

SELECT col1, col2, @row := @row+1 
FROM (SELECT table1.col1, table1.col2 
     FROM table1 
     LEFT JOIN table2 ON table1.col1 = table2.col5 
     WHERE table2.col5 IS NOT NULL 
     GROUP BY col1 
     ORDER BY table1.col7 DESC 
     LIMIT 0, 10) AS subquery 
+0

Спасибо, сэр .. –

1

Вы можете попробовать использовать встроенный вид. Используйте запрос, который получает строки, которые вы хотите вернуть, а затем оберните их в parens и ссылайтесь на этот запрос в предложении FROM внешнего запроса.

Что-то вроде этого:

SELECT v.`col1` 
     , v.`col2` 
     , @row := @row + 1 AS `rn` 
    FROM (SELECT `table1`.`col1` 
       , `table1`.`col2` 
      FROM `table1` 
       ... 
      ORDER BY ... 
      LIMIT 10 
     ) v