it-swarm.com.de

Wie werden die ersten 10 Zeilen und beim nächsten Mal weitere 10 Zeilen aus der Tabelle abgefragt?

Ich habe mehr als 500 Zeilen mit einem bestimmten Datum in meiner Datenbanktabelle. 

Um die Zeilen mit einem bestimmten Datum abzufragen.

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

Dies gibt 500 Zeilen zurück.

So können Sie diese 500 Zeilen in Schritten von 10 Zeilen abfragen. Abfragen Zuerst 10 Zeilen und im Browser anzeigen, danach 10 Zeilen abfragen und im Browser anzeigen

17
Ramprasad

Verwenden Sie einfach die LIMIT-Klausel.

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

Und ab dem nächsten Anruf können Sie Folgendes tun:

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

Weitere Informationen zu OFFSET und LIMIT finden Sie unter LIMIT UND OFFSET .

LIMIT limit OFFSET offset wird funktionieren.

Sie benötigen jedoch eine stable ORDER BY-Klausel, oder die Werte können für den nächsten Aufruf anders angeordnet werden (beispielsweise nach dem Schreiben in die Tabelle).

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

Verwenden Sie einen standardkonformen Datumsstil ( ISO 8601 in meinem Beispiel ), der unabhängig von Ihren Ländereinstellungen funktioniert.

Das Paging wird immer noch verschoben, wenn beteiligte Zeilen in relevanten Spalten eingefügt, gelöscht oder geändert werden. Es muss.

Um diese Verschiebung zu vermeiden oder die Leistung bei großen Tabellen zu verbessern, verwenden Sie intelligentere Paging-Strategien:

10
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)

Jedes Mal, wenn Sie die Parameter @PageNum und @PageSize übergeben, erhalten Sie die gewünschte Seite. Zum Beispiel wären die ersten 10 Zeilen @PageNum = 1 and @PageSize = 10

2
Mahmoud Gamal

für die ersten 10 Reihen ...

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

für die nächsten 10 Reihen

SELECT * FROM msgtable WHERE cdate='18/07/2012' LIMIT 10,10
1
Ankit Kumar
<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>
1
Raj

OK. Ich denke, Sie müssen nur die Paginierung implementieren.

$perPage = 10;

$pageNo = $_GET['page'];

Finden Sie jetzt die gesamten Zeilen in der Datenbank.

$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
0
user5271805

Sie können postgresql Cursors verwenden

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

Dann benutze

FETCH 10 FROM C;

10 Reihen holen.

Finnisch mit

COMMIT;

um den Cursor zu schließen.

Wenn Sie jedoch eine Abfrage in verschiedenen Prozessen durchführen müssen, ist LIMIT und OFFSET besser, wie von @Praveen Kumar vorgeschlagen

0
AlbertFerras