Mysql Узнать номер записи по запросу

lelik17

Новичок
Есть запрос к БД:

SELECT * FROM table WHERE type=0 ORDER BY id ASC

Нужно узнать номер строки по этому запросу, где id=5. Возможно ли это сделать без php, только sql-запросом?
 

С.

Продвинутый новичок
В SQL нет номеров строк.

Если вопрос: "Каким по порядку окажется запись с id=5 про таком-то запросе", то

SELECT count(1) FROM table WHERE type=0 AND id<=5 ORDER BY id ASC
 

lelik17

Новичок
В SQL нет номеров строк.

Если вопрос: "Каким по порядку окажется запись с id=5 про таком-то запросе", то

SELECT count(1) FROM table WHERE type=0 AND id<=5 ORDER BY id ASC

Ок, но это не совсем то. Что делать, если id, к примеру, не число, а текстовая строка?
 

fixxxer

К.О.
Партнер клуба
Что такое "номер строки"? В таблице строки не находятся в каком-либо определенном порядке. Вопрос о "порядке строк" для таблицы не имеет смысла. Можно говорить о порядке строк в результате SELECT-запроса и только если указан какой-то ORDER BY. В этом случае все ровно как с ID.

Предваряя следующий вопрос: если текстовое поле не уникально и задан order by по этому полю, вопрос порядка строк с одинаковым текстовым полем тоже не имеет смысла - он неопределен. В этом случае надо делать order by ТекстовоеПоле, id и далее по списку.
 

lelik17

Новичок
Что такое "номер строки"? В таблице строки не находятся в каком-либо определенном порядке. Вопрос о "порядке строк" для таблицы не имеет смысла. Можно говорить о порядке строк в результате SELECT-запроса и только если указан какой-то ORDER BY. В этом случае все ровно как с ID.

Предваряя следующий вопрос: если текстовое поле не уникально и задан order by по этому полю, вопрос порядка строк с одинаковым текстовым полем тоже не имеет смысла - он неопределен. В этом случае надо делать order by ТекстовоеПоле, id и далее по списку.
Конечно, я имел ввиду порядок строк в результате SELECT-запроса.

Давайте опишу немого по-другому. Есть таблица table. В ней поля id (int), hash (text), type (int). Нужно узнать какой по порядку будет стоять строка, где hash='xxxx' в запросе SELECT * FROM table WHERE type='0' ORDER BY id ASC
 

Фанат

oncle terrible
Команда форума
давай упростим сначала задачу? пусть нам будет известен не хэш, а id записи. тогда ты сможешь узнать, на какой сроке она находится?
 

lelik17

Новичок
давай упростим сначала задачу? пусть нам будет известен не хэш, а id записи. тогда ты сможешь узнать, на какой сроке она находится?
сначала нам известен только хэш. вы предлагаете воспользоваться первым предложенным запросом?
 

Фанат

oncle terrible
Команда форума
вообще я предлагаю подумать.
ну да ладно, не обращай внимания
 

lelik17

Новичок
вообще я предлагаю подумать.
ну да ладно, не обращай внимания
Спасибо за ценный комментарий. Я не силён в mysql, поэтому и обратился за помощью. Естественно, предварительно попытавшись решить задачу самостоятельно.
 

fixxxer

К.О.
Партнер клуба
1) пишешь запрос, который выбирает все строки ДО нужной (включая или не включая ту нужную, неважно - ну будет +1 или -1). раз у тебя есть сортировка, значит ты можешь воспользоваться условиями "меньше/больше" в where
2) меняешь запрос на select count

хотя я не понимаю, зачем это нужно. постраничная навигация?
 

lelik17

Новичок
1) пишешь запрос, который выбирает все строки ДО нужной (включая или не включая ту нужную, неважно - ну будет +1 или -1). раз у тебя есть сортировка, значит ты можешь воспользоваться условиями "меньше/больше" в where
2) меняешь запрос на select count

хотя я не понимаю, зачем это нужно. постраничная навигация?
Нужно для определения номера очереди. Не совсем ясно как выбрать ВСЕ СТРОКИ до нужной, если у нужной известен только hash.
 

Фанат

oncle terrible
Команда форума
а что - по хэшу id узнать нельзя?

убрал бы подпись, качественный ты наш
 

lelik17

Новичок
а что - по хэшу id узнать нельзя?

убрал бы подпись, качественный ты наш
Не хамите, пожалуйста. Если не можете помочь, проходите в соседнюю тему, не тратьте своё драгоценное время. Качественный в подписи контент и ко мне он не имеет отношения.

Я не сомневаюсь, что узнать по хэшу можно айди, но, к сожалению, я не знаю как это сделать одним запросом, поэтому и спрашиваю в том месте, которое предназначено для таких вопросов.
 

Фанат

oncle terrible
Команда форума
во-первых, я тебе не хамил.
во-вторых, подпись все-таки убери. а то жирно будет слишком - и "вопросы предназначенные задавать" и лавочку свою рекламировать.
в-третьих, какая проблема сделать это двумя запросами?
 

fixxxer

К.О.
Партнер клуба
Да пускай обставится своими ссылками - все равно подписи не видны гостям и ссылки в них с noindex-ом. ;)
 

WMix

герр M:)ller
Партнер клуба
В таблице строки не находятся в каком-либо определенном порядке.
яб сказал наоборот, каждое индексное поле имеет свой порядок!
Нужно для определения номера очереди. Не совсем ясно как выбрать ВСЕ СТРОКИ до нужной, если у нужной известен только hash.
это сделать легко зная запрос, fixxxer, совсем недавно self join писал...
Если не можете помочь, проходите в соседнюю тему, не тратьте своё драгоценное время.
не сметь подымать голос на учителя!
 

WMix

герр M:)ller
Партнер клуба
PHP:
CREATE TABLE IF NOT EXISTS `t2` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `hash` varchar(32) NOT NULL,
  PRIMARY KEY (`id`)
) ;

INSERT INTO `t2` (`id`, `hash`) VALUES
(1, 'c4ca4238a0b923820dcc509a6f75849b'),
(2, 'c81e728d9d4c2f636f067f89cc14862c'),
(3, 'eccbc87e4b5ce2fe28308fd9f2a7baf3'),
(4, 'a87ff679a2f3e71d9181a67b7542122c'),
(5, 'e4da3b7fbbce2345d7772b0674a318d5'),
(6, '1679091c5a880faf6fb5e6087eb1b2dc'),
(7, '8f14e45fceea167a5a36dedd4bea2543'),
(8, 'c9f0f895fb98ab9159f51fd0297e236d'),
(9, '45c48cce2e2d7fbdea1afc51c7c6ad26'),
(10, 'd3d9446802a44259755d38e6d163e820');

select count(self.id),t2.*
from t2 
left join t2 as self on t2.hash>self.hash
group by t2.id
order by t2.hash
 

WMix

герр M:)ller
Партнер клуба
Да, конечно!

create table t ( id int, key(id) );
insert into t values (1), (1), (1), (2), (2);
ну порядок они имеют же!... я так это понимаю: на каждый индекс отведена отдельная таблица где по порядку отсортированы ключи к которым записана строка в таблице (или лучше сказать строка файла где таблица записана)
 

fixxxer

К.О.
Партнер клуба
если поле не уникально и сортируешь только по нему, порядок среди одинаковых значений в общем случае не определен (innodb - частный случай)

об определенности можно говорить только при наличии unique constraint. в твоем примере оно присутствует неявно в группировке по id =)
 
Сверху