10/10/2018, 09:30
Tách dữ liệu thành nhiều trang khác nhau
Mình không biết là cái tiêu đề này nó có củ chuối quá hay không.
Mình có 1 bản ghi có quá nhiều trường, khi cho hiện kết quả trên trang php mình đã limit từ 0 đến 10 bản ghi nhưng mình muốn là làm sao để code php tự động duyệt số lượng bản ghi rồi chia ra thành nhiều trang khác nhau. Hoặc như trên blog của yahoo có next và previus ấy. Thank mọi người đã đọc. Nếu chủ để trùng rồi thì mọi người chỉ dẫn qua topic trùng cái.
Mình có 1 bản ghi có quá nhiều trường, khi cho hiện kết quả trên trang php mình đã limit từ 0 đến 10 bản ghi nhưng mình muốn là làm sao để code php tự động duyệt số lượng bản ghi rồi chia ra thành nhiều trang khác nhau. Hoặc như trên blog của yahoo có next và previus ấy. Thank mọi người đã đọc. Nếu chủ để trùng rồi thì mọi người chỉ dẫn qua topic trùng cái.
Bài liên quan
Tuy nhiên nó cơ bản là như thế này, bạn hãy sử dụng câu lệnh SQL sau:
"SELECT * FROM x_table LIMIT $start,$limit";
$limit là số lượng bản ghi bạn muốn hiển thị trên một trang.
hix, tui quên mất rồi,cái này copy của anh khác:
Tui đã đưa bí kiếp cho luyện rồi mà chưa xuống núi nửa hả U, vậy để tui giúp một tay nhé
//---------db.sql---------
DROP TABLE IF EXISTS guestbook;
CREATE TABLE guestbook (
name varchar(50),
date varchar(40),
email varchar(50),
comment longtext,
id int(4) DEFAULT '0' NOT NULL auto_increment,
PRIMARY KEY (id)
);
//------------index.php------------
<html>
<head>
<title>MySQL Guestbook</title>
</head>
<BODY text="#000000">
<?
$username = "sa"; //username for database here
$password = ""; //password for database here
$db_name = "test"; //name of your database here
$limit = 2; //entries displayed per page
//connect
mysql_pconnect( "localhost", "$username", "$password")
or die( "Unable to connect to SQL server");
mysql_select_db( "$db_name") or die( "Unable to select database");
$numresults=mysql_query("SELECT name, date, email, comment FROM guestbook");
$numrows=mysql_num_rows($numresults)
or die ("query 1 failed");
if (empty($offset)) {
$offset=0;
}
$query = "SELECT name, date, email, comment FROM guestbook order by date DESC limit $offset,$limit";
$result = mysql_query ($query)
or die ("query 2 failed");
while ($row = mysql_fetch_row ($result))
{
for ($i = 0; $i < mysql_num_fields ($result); $i++)
{
if ($i > 0)
print ("<br>");
if ($i == 0){
print "<b>Name: </b>";
}
else if ($i == 1){
print "<b>Date: </b>";
}
else if ($i == 2){
print "<b>Email: </b>";
}
else{
print "<b>Comment:</b><br>";
}
print ($row[$i]);
}
print "<br><br><center><img src='black.gif' width=590 height=1 border=0></center>";
print ("<P>");
}
if ($offset >= 3) {
$prevoffset = $offset - $limit;
print "<a href=\"index.php?offset=$prevoffset\">PREV</a> \n";
}
$pages=intval($numrows/$limit);
if ($pages < ($numrows/$limit)){
$pages=($pages + 1);
}
for ($i = 1; $i <= $pages; $i++) {
$newoffset = $limit*($i-1);
if ($newoffset == $offset) {
print "$i \n";
} else {
print "<a href=\"index.php?offset=$newoffset\">$i</a> \n";
}
}
//show next if not last
if (! ( ($offset/$limit) == ($pages - 1) ) && ($pages != 1) ) {
$newoffset = $offset+$limit;
print "<a href=\"index.php?offset=$newoffset\">NEXT</a><p>\n";
}
?>
</BODY>
</HTML>
Đọc qua cũng được
phân trang hiểu đơn giản là :
+query để tính tổng số tin sẽ duyệt
+tính tổng số trang sẽ có , khi đã biết số tin/1 trang
+dùng $_GET["page" để lấy số thứ tự trang muốn hiển thị từ URL vd: site.php?page=2
+query để lấy các tin thuộc trang đó .
chú ý : thông thường dữ liệu nhập vào theo thứ tự 1-2-3 . thì khi lấy ra sẽ là 3-2-1 . vì thường người ta sẽ duyệt tin mới trước .
cho nên xây dựng hàm query thì phải query theo cấu trúc sau .
SELECT* FROM `table`
WHERE `id`<=$id_cuoi
ORDER BY `id` DESC
LIMIT 0,tin/page
vì các tin mới sẽ nằm cuối trong table . cho nên ta sẽ load ngược từ tin cuối của page đó ( tức tin mới nhất trong các tin thuộc page đó ) đến tin đầu của page .
hàm ORDER có tác dụng sắp xếp . thêm DESC để sắp Giảm dần . tức các tin cuối ( mới ) sẽ nằm đầu .
LIMIT sẽ giới hạn 10 tin thuộc page đó .
vd : hàm mình xài là :
SELECT * FROM `hd_moi`
WHERE `stt`<=$stt_cuoi
ORDER BY `stt` DESC
LIMIT 0,10
+hiển thị tin
+dựng nút bấm để nhảy trang . gồm có nút next , previus và các nút từng trang .
VD của mình :
$page=$_GET["page"];
if ($page>1)
{
$page_last=$page-1;
echo "<a href=\"news.php?page=$page_last\"><<</a> ";
}
else
{
echo "<a href=\"news.php?page=1\"><<</a> ";
}
dễ hiểu mà . khi page > 1 . có nghĩa là khi nhấn nút này nó còn quay về trang nhỏ hơn được thì mới hiển thị nút này .
còn khi page=1 thì 1 là ko cho nhấn , 2 là nhấn nhưng vẫn là page 1 như của mình làm .
còn các link đến các page thì mình làm :
$a=1;
while ($a<=$so_trang)
{
if ($a==$page)
{
echo "<a href=\"news.php?page=$a\"><b>$a</b></a> ";
}
else
{
echo "<a href=\"news.php?page=$a\">$a</a> ";
}
$a+=1;
}
nó sẽ lần lượt tạo ra các link đến page theo $a .
các bước cơ bản thế là xong đấy .bạn cứ mò tiếp .
Hoan nghênh tiinh thần ham học của mấy pác.
Nếu như dân IT mà như mấy pác thì mình tin một ngày nào đó không xa, Việt Nam sẽ không thua kém mấy nước khác ...
Success ... ^_^