вернуть номер записи в таблице sql pdo - PullRequest
0 голосов
/ 06 мая 2020

У меня есть таблица со списком: комментарии

comment: id_comment,comment, id_postcommented

comment
---------
comment A
commen  B
comment C
comment D
comment E
comment F
comment G
comment H
comment I
comment J

Мне нужно получить номер комментария, например

`comment H: 8`

SQL

  select count(*) /* its not */
  from comments
  where id_comment = ?

Я просто не знаю, как мне его получить

Ответы [ 2 ]

1 голос
/ 06 мая 2020

Если столбец id_comment является идентификатором автоинкремента, вы можете подсчитать идентификаторы, которые меньше или равны тому, который вы ищете:

select count(*)
from comments
where id_comment <= (select id_comment from comments where comment = 'comment H')

Если вы хотите искать по id_comment:

select count(*)
from comments
where id_comment <= :id_comment

Или с функцией окна row_number():

select t.rn
from (
  select *, row_number() over (order by id_comment) rn
  from comments
) t
where t.comment = 'comment H'

По id_comment:

select t.rn
from (
  select *, row_number() over (order by id_comment) rn
  from comments
) t
where t.id_comment = :id_comment

Если вы выберете последний запрос, вы можете добавить Предложение WHERE:

select t.rn
from (
  select *, row_number() over (order by id_comment) rn
  from comments
  where id_comment <= :id_comment
) t
where t.id_comment = :id_comment 

, потому что нет необходимости обрабатывать id_comment s больше :id_comment.

Другое решение с функцией окна COUNT():

select count(*) over (order by id_comment) 
from comments
where id_comment <= :id_comment 
order by id_comment desc limit 1
0 голосов
/ 06 мая 2020

Если я понимаю, вы хотите знать номер вашего комментария, то есть если это десятый комментарий, то 10? Тогда вы должны использовать row_number

WITH MyTable AS -- you create a temp table ordered with rownumber corresponding to the line number.
(
    SELECT id_comment,
    ROW_NUMBER() OVER ( ORDER BY id_comment ) AS 'RowNumber'
    FROM comments
) 
-- now you get this row number
SELECT RowNumber, id_comment     
FROM MyTable 
WHERE id_comment = 'H'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...