Mon 20 Feb 2006 09:18:10
โค้ดข้างล่างเป็นโค้ดที่ดึงข้อมูลมาจากดาต้าเบสครับ คือดึงแบบเพียว ๆ แบบนี้แหละ แต่มันจะโชว์ข้อมูลมาตรึมเลยอ่ะครับ
<?
$sql_link = mysql_pconnect ("","","");
mysql_select_db("");
$row1 = mysql_query("SELECT a.* , m.displayname FROM activity_01pangya a , mem_account m WHERE m.no = a.mem_no ORDER BY mem_no ASC");
while ($r = mysql_fetch_array($row1)){
echo "[$r[mem_no]] : $r[displayname] >> $r[mem_serial]<br>"; // โชว์ id ,ชื่อสมาชิก, โค้ด
}
?>
ผมเลยอยากได้โค้ดแบ่งหน้าอะครับ รบกวนด้วยครับ คืองานต้องส่งแล้ว
แล้วก็ขอโค้ดนับจำนวนคนที่ได้ serial ทั้งหมดอะครับ แบบว่าไม่รู้จะเอาโค้ดยังไงมาใส่อ่ะ
$pages = ceil((mysql_num_rows($res)/20);
จากนั้นก็วน loop for ทำการ print ตัวเลขตั้งแต่ 1-จำนวน $pages แล้วก็ใส่ลิงค์ของแต่ละหน้า
ส่วนการ SELECT ในหน้าต่อๆไปก็ใช้ keyword LIMIT ช่วยในการ query ครับ
ส่วนการจะหาค่า field member ที่มี serial นั้นต้องดูก่อนว่า field serial นั้นถ้าไม่มีค่าจะเป็นค่าใด NULL หรือ EmptyString ซึ่งนำค่านั้นมาใส่ใน WHERE CLAUSE ครับ
Mon 20 Feb 2006 11:01:08
อู้ อึ้งเลยครับ ขอแบบเต็ม ๆ ได้ป่ะ ผมมันอ่อนหัดเรื่องสคริ๊ปมาก ๆ เลยครับ ถ้าตัวอย่างไม่มีอผมก็แย่เลยครับ
<?
$num_records = 20; //Amount of records per page
$sql_link = mysql_pconnect ("","","");
mysql_select_db("");
$result = mysql_query("SELECT a.* , m.displayname FROM activity_01pangya a , mem_account m WHERE m.no = a.mem_no ORDER BY m.mem_no ASC LIMIT ".(isset($_GET["start"])?$_GET["start"]:0).",".$num_records); //SELECT specified records
while ($r = mysql_fetch_array($result, MYSQL_ASSOC)){
echo "[$r[mem_no]] : $r[displayname] >> $r[mem_serial]<br>"; // โชว์ id ,ชื่อสมาชิก, โค้ด
}
$pages = ceil($records/$num_records);
for($i = 0; $i < $pages; $i++){
echo "<a href=\"".$_SERVER["PHP_SELF"]."?start=".($i*$num_records)."\">".($i+1)."</a>";
}
?>
อธิบาย
$num_records = เป็นตัวแปรจำนวน records ต่อหน้า
$records = mysql_num_rows(mysql_query("SELECT a.* , m.displayname FROM activity_01pangya a , mem_account m WHERE m.no = a.mem_no")); เป็นการ SELECT ข้อมูลทั้งหมดที่มีผลต่อ Query นี้เพื่อนับจำนวนทั้งหมดเก็บไว้ในตัวแปร $records
$result = mysql_query("SELECT a.* , m.displayname FROM activity_01pangya a , mem_account m WHERE m.no = a.mem_no ORDER BY m.mem_no ASC LIMIT ".(isset($_GET["start"])?$_GET["start"]:0).",".$num_records); เป็นการ SELECT record ที่มีผลตามที่ระบุ โดยตรวจสอบว่ามีการส่งตัวแปร start มาใน querystring หรือไม่ ถ้ามีก็ให้เริ่มนำ record ตั้งแต่ที่ระบุเป็นจำนวน $num_records ( LIMIT <recodr เริ่มต้น>, <จำนวน record>
$pages = ceil($records/$num_records); หาจำนวนหน้าทั้งหมด
for($i = 0; $i < $pages; $i++){
echo "<a href=\"".$_SERVER["PHP_SELF"]."?start=".($i*$num_records)."\">".($i+1)."</a>";
} ทำลิงค์เพื่อไปยังหน้าต่างๆ โดยส่งตัวแปร start ไปใน querystring
Mon 20 Feb 2006 12:10:58
ขอบคุณครับคุณ administrator
Mon 20 Feb 2006 12:24:12
มัน error แบบนี้ครับ
//
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /www/xxx/xxx/xxx/xxx/list.php on line 24
123456789101112131415
บันทัดที่ 24 คือ
while ($r = mysql_fetch_array($result, MYSQL_ASSOC)){
บันทัดที่ 25
echo "[$r[mem_no]] : $r[displayname] >> $r[mem_serial]<br>"; // âªÇì id ,ª×èÍÊÁÒªÔ¡, â¤é´
}
Mon 20 Feb 2006 12:47:02
ได้แล้วครับ ขอบคุณอีกครั้งครับผม
Mon 20 Feb 2006 13:14:55
แล้วถ้าจะเขียนโค้ดให้นับจำนวนทั้งหมด ทำไงบ้างครับ
Wed 22 Feb 2006 11:22:43
ได้แล้วครับ พอดีผมทำเป็นแบบโชว์หน้าละ 50 มันก็เลยดึงมาโชว์แค่ 50 นะครับ ทำยังไงถึงจะได้โชว์ทั้งหมดเลยครับ
Fri 8 Sep 2006 22:12:04
ใช้ SQL Server เป็นฐานข้อมูล มันไม่มีคำสั่ง limit แล้วจะทำยังไงดีล่ะ แถมยังติดต่อฐานข้อมูลด้วย ODBC อีกลองประยุกต์ใช้แล้วไม่ได้ผลเลย แต่ code นี้ผมว่าเข้าใจง่ายดีนะแต่ใช้กับงานของผมไม่ได้ รบกวนคุณ Admin ด้วยครับ
Fri 8 Sep 2006 23:58:26
while ($r = mysql_fetch_array($result, MYSQL_ASSOC)){
echo "[$r[mem_no]] : $r[displayname] >> $r[mem_serial]<br>"; // โชว์ id ,ชื่อสมาชิก, โค้ด
}
แล้วถ้าแปลงให้เป็นการติดต่อแบบ odbc ล่ะครับใช่แบบนี้หรือเปล่า
$num_records = 20;
$sql= "SELECT * FROM Hardware ORDER BY Name ASC";
$records = odbc_num_rows(odbc_exec($conn,$sql));
*** $result = odbc_exec($conn, ("SELECT TOP $num_records * FROM Hardware ORDER BY Name ASC ".(isset($_GET["start"])?$_GET["start"]:0).",".$num_records));
while ($r = odbc_fetch_row($result)){
echo odbc_result($result,"Name");
echo "<a href=$PHP_SELF?no=" .odbc_result($result,"No"). ">" .odbc_result($result,"Name")."</a>";
}
$pages = ceil($records/$num_records);
for($i = 0; $i < $pages; $i++){
echo "<a href=\"".$_SERVER["PHP_SELF"]."?start=".($i*$num_records)."\">".($i+1)."</a>";
}
เหมือนว่าจะผิดพลาดครับที่ *** แต่ความรู้ยังไม่มากพอแบบว่ามือใหม่ ขอรบกวนคุณ Admin อีกรอบแล้วกัน
ตรงนี้เป็นโค๊ดเพื่อสร้าง parameter ให้กับ LIMIT ครับ คำสั่งที่ใช้สำหรับ SQL Server ควรจะเหลือ
$result = odbc_exec($conn, ("SELECT TOP $num_records * FROM Hardware ORDER BY Name ASC");
เท่านี้ครับ
Sat 9 Sep 2006 12:31:19
แล้วถ้าต้องการให้มันแสดงหน้าเหมือนกับการใช้ limit ล่ะครับ แบบว่าถ้าใช้ top มันจะแสดงแค่หน้าแรกเท่านั้น อย่างนี้ต้องทำอย่างไรบ้างล่ะครับผม แบบว่าขอละเอียดเลยแล้วกันครับ พยายามนั่งงมเมื่อคืนแล้วครับแต่ทำไม่ได้ -_-"
"SELECT TOP 10 * FROM Hardware h WHERE h.id NOT IN (SELECT TOP 20 * FROM Hardware ORDER BY Name ASC) ORDER BY Name ASC"
โดย h.id เป็น field ที่เป็น primary key ครับ จากโค๊ดจะได้ record ตั้งแต่ record ที่ 11 - 20 ครับ
Sat 9 Sep 2006 19:31:13
จะลองทำดูนะครับ ขอบคุณครับคุณ Admin
Thu 7 Feb 2008 17:28:21
Thu 28 Feb 2008 11:27:05
แล้วการนับทีละหน้าแบบต่อเนื่องหล่ะ
เช่น หน้าแรก 1-50 แล้วหน้าที่ สอง 51-100 หล่ะ มันไม่ไป มันตัดที่ 1-50 ตลอดเลย
งง.... Please...
Sat 8 Mar 2008 02:45:06

















