php - Come dividere i risultati di ricerca in pagine?




javascript mysql (4)

Come dividere i risultati della ricerca in pagine? (come pagina 1, pagina 2, pagina 3 ...)

Quando l'utente cerca prodotti sul mio sito di e-commerce, voglio che i risultati siano suddivisi in diverse pagine che mostrano circa 20 prodotti per pagina. I risultati della ricerca sono il risultato della query del database.

Ad esempio: se l'utente cerca i cellulari Samsung, la mia query sarà:

SELECT * FROM PRODUCTS WHERE BRAND='SAMSUNG';

Supponiamo che la query sopra riportata restituisca 55 risultati, come visualizzarli in pagine (1,2 e 3)?

Sto usando PHP , MySQL , Apache su macchine Windows.


Ecco il codice completo:

<?php
// Requested page
$requested_page = isset($_GET['page']) ? intval($_GET['page']) : 1;

// Get the product count
$r = mysql_query("SELECT COUNT(*) FROM PRODUCTS WHERE BRAND='SAMSUNG'");
$d = mysql_fetch_row($r);
$product_count = $d[0];

$products_per_page = 20;

// 55 products => $page_count = 3
$page_count = ceil($product_count / $products_per_page);

// You can check if $requested_page is > to $page_count OR < 1,
// and redirect to the page one.

$first_product_shown = ($requested_page - 1) * $products_per_page;

// Ok, we write the page links  
echo '<p>';
for($i=1; $i<=$page_count; $i++) {
    if($i == $requested_page) {
        echo $i;
    } else {
        echo '<a href="/products/samsung/'.$i.'">'.$i.'</a> ';
    }
}
echo '</p>';

// Then we retrieve the data for this requested page
$r = mysql_query("SELECT * FROM PRODUCTS WHERE BRAND='SAMSUNG' LIMIT $first_product_shown, $products_per_page");

while($d = mysql_fetch_assoc($r)) {
    var_dump($d);
}
?>

Spero che il suo aiuto.


L'SQL appropriato dovrebbe aggiungere:

LIMIT start, amount

Puoi navigare come

search.php?start=20

e poi codice come:

LIMIT $start, $amount

con

$start = intval($_GET['start']);

e

$amount = 20;

Ciò comporterà un massimo di 20 record per pagina.


Sì, è possibile eseguire una query per ottenere il conteggio totale dei record e utilizzare la query utilizzando il limite

exampe: selezionare count (id) da table_name

Ciò restituirà il numero totale di record nel database


Utilizzare la parola chiave LIMIT di SQL per limitare la quantità di risultati della query; per esempio:

SELEZIONA * DAI PRODOTTI DOVE IL MARCHIO = LIMITE 'SAMSUNG' 20, 40;

Ciò selezionerebbe 20 elementi, a partire dal 40 °





pagination