subconsultas sintaxis sentencias ejemplos datos consultas complejas sql postgresql

sentencias - sintaxis select sql



Cómo consultar las primeras 10 filas y la próxima vez consultar otras 10 filas de la tabla (7)

Tengo más de 500 filas en mi tabla de base de datos con fecha particular.

Para consultar las filas con fecha concreta.

select * from msgtable where cdate=''18/07/2012''

Esto devuelve 500 filas.

Cómo consultar estas 500 filas por 10 filas paso a paso. Consultar las primeras 10 filas y mostrar en el navegador, luego consultar las siguientes 10 filas y mostrar en el navegador?


De acuerdo. Así que creo que solo necesitas implementar Paginación.

$perPage = 10; $pageNo = $_GET[''page''];

Ahora encuentra las filas totales en la base de datos.

$totalRows = Get By applying sql query; $pages = ceil($totalRows/$perPage); $offset = ($pageNo - 1) * $perPage + 1 $sql = "SELECT * FROM msgtable WHERE cdate=''18/07/2012'' LIMIT ".$offset." ,".$perPage


Puedes usar los cursores postgresql

BEGIN; DECLARE C CURSOR FOR where * FROM msgtable where cdate=''18/07/2012'';

Entonces use

FETCH 10 FROM C;

para obtener 10 filas.

Finlandés con

COMMIT;

para cerrar el cursor.

Pero si necesita hacer una consulta en diferentes procesos, LIMIT y OFFSET como lo sugiere @Praveen Kumar es mejor


Solo usa la cláusula LIMIT .

SELECT * FROM `msgtable` WHERE `cdate`=''18/07/2012'' LIMIT 10

Y a partir de la próxima convocatoria podrás hacerlo de esta manera:

SELECT * FROM `msgtable` WHERE `cdate`=''18/07/2012'' LIMIT 10 OFFSET 10

Más información en OFFSET y LIMIT en LIMIT y OFFSET .


para las primeras 10 filas ...

SELECT * FROM msgtable WHERE cdate=''18/07/2012'' LIMIT 0,10

para las siguientes 10 filas

SELECT * FROM msgtable WHERE cdate=''18/07/2012'' LIMIT 10,10


LIMIT limit OFFSET offset funcionará.

Pero necesita una cláusula ORDER BY estable , o los valores pueden ordenarse de manera diferente para la siguiente llamada (después de cualquier escritura en la tabla, por ejemplo).

SELECT * FROM msgtable WHERE cdate = ''2012-07-18'' ORDER BY msgtable_id -- or whatever is stable LIMIT 10 OFFSET 50; -- to skip to page 6

Use un estilo de fecha que cumpla con el estándar ( ISO 8601 en mi ejemplo ), que funciona independientemente de la configuración regional.

La paginación seguirá cambiando si las filas involucradas se insertan, eliminan o cambian en las columnas relevantes. Tiene que.

Para evitar ese cambio o para un mejor rendimiento con tablas grandes, use estrategias de paginación más inteligentes :


SET @rownum = 0; SELECT sub.*, sub.rank as Rank FROM ( SELECT *, (@rownum := @rownum + 1) as rank FROM msgtable WHERE cdate = ''18/07/2012'' ) sub WHERE rank BETWEEN ((@PageNum - 1) * @PageSize + 1) AND (@PageNum * @PageSize)

Cada vez que pase los parámetros @PageNum y @PageSize para obtener la página específica que desea. Por ejemplo, las primeras 10 filas serían @PageNum = 1 and @PageSize = 10


<html> <head> <title>Pagination</title> </head> <body> <?php $conn = mysqli_connect(''localhost'',''root'','''',''northwind''); $data_per_page = 10; $select = "SELECT * FROM `customers`"; $select_run = mysqli_query($conn, $select); $records = mysqli_num_rows($select_run); // while ($result = mysqli_fetch_array($select_run)) { // echo $result[''CompanyName''] . ''<br>''; // } // $records; echo "<br>"; $no_of_page = ceil($records / $data_per_page); if(!isset($_GET[''page''])){ $page = 1; }else{ $page = $_GET[''page'']; } $page_limit_data = ($page - 1) * 10; $select = "SELECT * FROM customers LIMIT " . $page_limit_data . '','' . $data_per_page ; $select_run = mysqli_query($conn, $select); while ($row_select = mysqli_fetch_array($select_run)){ echo $row_select[''CompanyName''] . ''<br>'' ; } for($page=1; $page<= $no_of_page; $page++){ echo "<a href=''pagination.php?page=$page''> $page" . '', ''; } ?> <br> <h1> Testing Limit Functions Here </h1> <?php $limit = "SELECT CompanyName From customers LIMIT 10 OFFSET 5"; $limit_run = mysqli_query($conn , $limit); while($limit_result = mysqli_fetch_array($limit_run)){ echo $limit_result[''CompanyName''] . ''<br>''; } ?> </body> </html>