2015-06-13 3 views
0

Я пытаюсь создать rownum для запроса mysql. Это мой код.Ошибка первой строки с @rownum mysql

select @rownum:[email protected]+1 rowno, (`plgap_nos`.`no_id` - 1) AS `no_id` 
from `plgap_nos`, 
    (SELECT @rownum:=0) r 
limit 0, 10 

Пока все работает нормально, ROWNUM первых строк обуви 1621, а не 0.

Пробовал с кодом различным, как показано ниже. все еще такая же ошибка сохраняется.

select COALESCE(@rownum:[email protected]+1,0) rank, 
     (`cnxnifty_plgap_nos`.`no_id` - 1) AS `no_id` 
from `money_database`.`cnxnifty_plgap_nos`, 
    (SELECT @rownum:=0) r 
limit 0, 10 

Похоже, что я совершаю какую-то глупую ошибку, которую я не могу понять. Может кто-нибудь помочь.

Дополнительное info- это как looks- данные

Ранг           no_id
    тысяча шестьсот двадцать-один                       444 7 +47819055319431365588888
                                                                                         

+0

Вам нужно добавить предложение ORDER BY в ваш запрос, иначе порядок строк и, следовательно, значения '@ rownum' будут произвольными. –

+0

@GiorgosBetsos - см. Снимок данных, который я добавил в главном сообщении. Хотя каждый rownum и no_id находятся в одном порядке, rowno для 1-й записи - 1621. –

+0

Это потому, что первая строка с 'no_id = 0' обрабатывается * не *. Вы ** должны ** добавить 'ORDER BY no_id', если вам нужна эта строка, чтобы иметь' @ row_num = 1'. –

ответ

0

Я просто хочу быть ясными. Следующий код показывает ту же проблему?

select (@rn := @rn + 1) as rowno, (p.no_id - 1) AS no_id 
from plgap_nos p cross join 
    (SELECT @rn := 0) params 
order by p.no_id 
limit 0, 10; 

Переменное назначение в select должно быть выполнено после того, как from инициализации. Я не видел, чтобы MySQL выполнял инициализацию в неправильном порядке (что было бы одной из причин поведения, которое вы видите).

Изменения, внесенные в запрос (cross join вместо запятой, order by и псевдоним таблицы), не должны влиять на набор результатов.Однако семантика области обзора cross join отличается от ,, поэтому существует небольшая небольшая вероятность того, что cross join может решить проблему.

 Смежные вопросы

  • Нет связанных вопросов^_^