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>