Pregunta

Necesito ubicar la posición del índice de un registro en una tabla de base de datos grande para preestablecer un paginador a la página de ese elemento. Necesito una consulta SQL eficiente que me pueda dar este número. Lamentablemente, SQL no ofrece algo como:

SELECT INDEX(*) FROM users WHERE userid='123'

¿Alguna idea brillante?

EDITAR: Supongamos que hay una cláusula ORDER BY adjunta a esto. el punto es que no quiero tener que cargar todos los registros para localizar la posición de uno específico. Estoy intentando abrir un buscapersonas en la página que contiene un elemento existente que se había elegido anteriormente, porque quiero proporcionar información sobre ese elemento ya elegido dentro de un contexto que permite a un usuario elegir otro diferente.

¿Fue útil?

Solución

Puede usar algo como (pseudo-código):

  • consulta de conteo: $ n = seleccione conteo (uid) de {users} donde ... (su condición de paginación incluye el ID de usuario 123 como límite)
  • $ page = floor ($ n / $ pager_size);
  • consulta de visualización: seleccione qué, usted, desea de {users} where (su condición de paginación sin el límite), pasó a db_query_range (thequery, $ page, $ pager_size)

Deberías mirar pager_query , porque eso es lo que todo, y básicamente funciona así: una consulta de conteo y una consulta de pantalla, excepto que intenta construir la consulta de conteo automáticamente.

Otros consejos

Suponiendo que realmente está preguntando cómo hacer una página de los registros en SQL Server 2005 en adelante, eche un vistazo a este código en David Hayden :

(deberá cambiar Fecha, Descripción para que sean sus columnas)

CREATE PROCEDURE dbo.ShowUsers
    @PageIndex INT, 
    @PageSize INT 
AS

BEGIN 

  WITH UserEntries AS ( 
  SELECT ROW_NUMBER() OVER (ORDER BY Date DESC) AS Row, Date, Description 
  FROM users)

  SELECT Date, Description
  FROM UserEntries 
  WHERE Row BETWEEN (@PageIndex - 1) * @PageSize + 1 AND @PageIndex * @PageSize

END 

SQL no garantiza el orden de los objetos en la tabla a menos que use la cláusula OrderBy. En otras palabras, el índice de cualquier fila en particular puede cambiar en consultas posteriores. ¿Puede describir lo que está tratando de lograr con el buscapersonas?

Podría estar interesado en algo que simula el rownum () de Oracle en MySQL ... si está usando MySQL, por supuesto, ya que no está especificado en la pregunta.


Notas :

Tendrás que revisar todos los registros de tus páginas para que funcione, por supuesto. No es necesario que los vuelva a buscar en la página de PHP desde el servidor de la base de datos, pero tendrá que incluirlos en la consulta. No existe un truco de magia para determinar la posición de su fila dentro de un conjunto de resultados que no sea consultar el conjunto de resultados, ya que podría cambiar debido a las condiciones, los pedidos y los grupos. Necesita estar en contexto.

Por supuesto, si todas sus filas son secuenciales, con identificaciones incrementales, no se eliminan, y conoce la primera y la última identificación; entonces podrías usar un conteo y con matemáticas simples obtener la posición sin consultar todo ... pero dudo que sea tu caso, nunca lo es.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top