|
|
|
ขออนุญาตปรึกษา ผู้เชี่ยวชาญครับ เรื่องการแบ่งหน้า โจทก์ยากนิดนึงครับ |
|
|
|
|
|
|
|
คือตอนนี้ข้อมูลมันจะเยอะแล้วโหลดช้ามาก ผมได้พยายามศึกษาจากเว็บโดยไม่รบกวนผู้เชี่ยวชาญ แต่ปรากฏว่าไม่สามารถหาทางออกได้
คือ ผมต้องการแบ่งหน้า จากการคำนวณสินค้าคงเหลือแล้ว จากที่ในเว็บมี ผมเจอแต่แบ่งตั้งแต่การค้นหาครั้งแรก แต่ไม่มีแบ่งหน้าจากคำนวณสินค้าเสร็จแล้ว จึงขออนุญาต ช่วยให้คำแนะนำผมหน่อยครับ
โค๊ดที่ใช้อยู่ เขียนเอง ไม่ได้เรียนมา ได้จาก เว็บนี้ทั้งหมด กราบจากใจ
Code (PHP)
<body>
<?php
session_start();
include("./lib/connect.php");
include("./css/layout.css");
include("./css/form.css");
$strSQL8 = "SELECT * FROM lf_member WHERE mid = '".$_SESSION['UserID']."' ";
$objQuery8 = mysqli_query($conn,$strSQL8);
$objResult8 = mysqli_fetch_array($objQuery8,MYSQLI_ASSOC);
$sql6 = "select * from category where Category_ID = $_GET[category]";
$objQuery6 = mysqli_query($conn, $sql6);
$objResult6 = mysqli_fetch_array($objQuery6,MYSQLI_ASSOC);
?><center>
<?php
echo $objResult6[Category_Name];
?></center>
<hr>
<?php
//echo $_SESSION['UserID'];
$sql2 = "select * from Product_Category where Product_Category_ID = $_GET[category] ORDER BY Product_ID DESC";
$result2 = mysqli_query($conn, $sql2);
echo"<table cellspacing=\"1\" cellpadding=\"1\"><tr>";
while($row2 = mysqli_fetch_array($result2))
{
$sql = "select * from product where Product_ID = $row2[Product_ID] ";
$result = mysqli_query($conn, $sql);
while($row = mysqli_fetch_array($result))
{
$sqll = "select * from Productdetail where Product_ID = $row[Product_ID] AND branch_id = 1 ORDER BY Productdetail_ID DESC";
$resultl = mysqli_query($conn, $sqll);
while($rowl = mysqli_fetch_array($resultl))
{
$strSQL2 = "SELECT SUM(product_qty) FROM orderdetail WHERE Product_Code = '".$rowl[Product_Code]."' ";
$objQuery2 = mysqli_query($conn,$strSQL2);
$objResult2 = mysqli_fetch_array($objQuery2,MYSQLI_ASSOC);
$TOTALQTY=$rowl["Product_QTY"]-$objResult2["SUM(product_qty)"];
if ($TOTALQTY > 0){
echo "<td> ";
$intRows++;
?>
<div><a href="productdetail.php?Product_ID=<?php echo $row["Product_ID"];?>&category=<?php echo $_GET["category"];?>"><img src=http://admin.xx.com/imageproduct/<?php echo $row["Product_PicName"]; ?> width='150'></a></div>
<div><?php echo $row["Product_Name"]; ?> ราคา <?php
if($objResult8["statusmid"]==1){
echo number_format($rowl["Product_wholesale_Price"],2);?><?php
}else{
echo number_format($rowl["Product_Frontshop_Price"],2);?><br>ลดเหลือ <?php echo number_format($rowl["Product_Sale_Price"],2);
}
?><br>จำนวน<?php echo $TOTALQTY;?> ชิ้น <br>
<a href="productdetail.php?Product_ID=<?php echo $row["Product_ID"];?>&category=<?php echo $_GET["category"];?>">รายละเอียดสินค้า</a></div>
<?php
echo"</td>";}
if(($intRows)%2==0)
{
echo"</tr>";
}
}}}echo"</tr></table>";
?></body>
ขออนุญาต ชี้แนะ หรือ วิธีคิด ครับ จะพยายามศึกษาครับ
ขอบคุณครับ
Tag : PHP
|
|
|
|
|
|
Date :
2018-09-18 18:22:13 |
By :
phatstype |
View :
720 |
Reply :
8 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
หลักๆคือต้องเพิ่ม SESSION เก็บค่า Total ของแต่ละหน้าครับ
จากนั้นเมื่อเปลี่ยนหน้า ก็ให้เอาค่าหน้านั้นมาแสดง
เช่น หน้า 1
Code (PHP)
$_SESSION['total_of_search'][1] = array(
'total_qty' => $total_qty,
'total_qty' => $total_price,
);
หน้า 2 ก็จะเป็นเลข 2
$_SESSION['total_of_search'][2] = array(
'total_qty' => $total_qty,
'total_qty' => $total_price,
);
ก็คือเอาเลขหน้ามาสร้างอัตโนมัตินั่นเอง
$_SESSION['total_of_search'][$your_page_number] = array(
'total_qty' => $total_qty,
'total_qty' => $total_price,
);
ถ้ามีการกดค้นหาใหม่ ก็ unset($_SESSION['total_of_search']) ทิ้งไปเลยเพื่อไม่ให้ปนกัน แต่ถ้าเปลี่ยนหน้า ก็ดึงมาใช้ต่อ
ทีนี้เอามาใช้ยังไง ก็ดึงมาเป็นยอดยกมา ที่แถวแรก เพื่อนำมารวมกันครับ
ซึ่งยอดยกมาต้องเป็นเลขหน้าก่อนหน้าปัจจุบันก็ให้ลบ 1
if(isset($_SESSION['total_of_search'][$your_page_number - 1] )){
//echo แถวสำหรับยอดยกมา
}
หวังว่าจะตรงกับที่ต้องการนะครับ
|
|
|
|
|
Date :
2018-09-18 21:49:52 |
By :
{Cyberman} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ขออนุญาตสอบถามเพิ่มครับ กรณีนี้ แนวคิด คือ แสดงออกมาทั้งหมด ก่อน แล้ว แบ่งช่วง อีกรอบ ถูกต้องมั้ยครั บ
คำถามอีกนิดครับ ถ้าแสดงออกมาทั้งหมด มันจะทำให้โหลดช้า เหมือนเดิมรึป่าวครับ หรือพอมีวิธีที่ สามารถ ลบ ต่าง table กันในคราวเดียวกันโดยผ่าน SQL มั้ยครับ แล้ว numrow เอาได้มั้ยครับ แนะนำ หน่อยครับ เผื่อ สามารถ เข้าสูตร แบ่งหน้าตามปกติได้ครับ
ขอบคุณมากครับ ท่านบอกมา ผมเลยนึกได้อีกนิดครับ
|
ประวัติการแก้ไข 2018-09-18 22:32:55
|
|
|
|
Date :
2018-09-18 22:31:53 |
By :
phatstype |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ในส่วนของโค้ดที่ทำงานช้านั้น เพราะว่าท่านเอาลูปซ้อนกันถึง 3 ลูป จึงเกิดการคิวรี่หลายครั้ง
แนะนำให้ลองปรับแต่งโดยการเก็บไว้ในอาร์เรย์เป็นชุดๆ แล้วเอามาวนลูปแสดงครั้งเดียวครับ
ลองอ่านบทความ เพื่อลดจำนวนการ Query ฐานข้อมูล MySQL ที่เป็น while ซ้อนใน while
https://www.thaicreate.com/community/php-design-query-mysql.html
|
|
|
|
|
Date :
2018-09-19 06:37:25 |
By :
{Cyberman} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
แบ่งหน้าก็ใช้ server-side ของ DataTable ครับ ถ้ายังไม่ตอบโจทย์...
ลองดู class แบ่งหน้าของ Mr.v หาดูในบอร์ดนี่ล่ะ น่าจะปรับเข้ากับงานได้
|
|
|
|
|
Date :
2018-09-19 08:27:38 |
By :
apisitp |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ลองไปโหลดฝั่ง database ดูบ้างก็ได้ครับ
ตอนนี้เหมือนจะไปหนักที่ฝั่ง code เป็นหลัก
ลองศึกษาเรื่องการ join ใน database ดูครับ เผื่อจะตอบโจทย์
|
|
|
|
|
Date :
2018-09-19 09:18:33 |
By :
Jatmentz |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
เริ่มต้น session ตรงนี้ใช้งานไม่ได้
Code (PHP)
<body>
<?php
session_start();
ต้องย้ายไปต้นไฟล์ก่อนการส่งค่าทั้งหมด
Code (PHP)
<?php
session_start();
?><!doctype html>
<html>
<body>
แต่ถ้า session ยังใช้ได้แสดงว่าคุณ ประกาศ session_start() ไว้หลายที่
ควรทำการเปิดให้ แสดง error ไว้ก่อน รูปแบบมาตรฐานที่ควรใช้ ขณะทดสอบโปรแกรม
Code (PHP)
<?php
error_reporting(-1); ini_set('display_errors', 1);
session_start();
ตรงนี้ให้ใส่ single quote ครอบด้วย ถ้าไม่ใช่ constant โปรแกรมจะทำงานเร็วขึ้น
Code (PHP)
<?php
//echo $objResult6[Category_Name];
echo $objResult6['Category_Name'];
?>
การใช้งานตัวแปร get อย่าใช้ตรงๆ ให้มีการแปลง ให้อยู่ในรูปแบบใช้งาน หรือใช้เครื่องมือ ของ db tool ในการ คิวรี่
Code (PHP)
//$sql6 = "select * from category where Category_ID = $_GET[category]";
//$objQuery6 = mysqli_query($conn, $sql6);
$sql6 = 'select * from category where Category_ID = ' . ($_GET['category'] * 1 ); // กรณี category เป็นตัวเลข
$objQuery6 = $conn->query($sql6);
// หรือ
$sql6 = 'select * from category where Category_ID = ?';
$stmt = $conn->prepare($sql6);
$stmt->binding('i', $_GET['category']);
$stmt->Excute();
$objQuery6=$stmt->get_result();
สำคัญมาก ศึกษา sql statement เพิ่มเติม เพื่อจะได้ ทำการ join กัน ทำให้ 2-3 ตารางมารวมกัน เป็นตารางเดียว
สร้าง index ขึ้นมาใช้งาน จะช่วยการคิวรี่ ได้เร็วมากขึ้น แบบ มากๆๆๆๆ
|
|
|
|
|
Date :
2018-09-19 10:05:24 |
By :
Chaidhanan |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
reindex database
|
|
|
|
|
Date :
2018-09-19 17:26:47 |
By :
xman |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ขอบพระคุณทุกท่านครับ ผมขอเก็บไปศึกษาดูก่อนครับ
จะพยายามไม่รบกวนครับเพราะเชื่อว่า ตามที่คนถามมา น่าจะมีเพียงพอครับ
|
|
|
|
|
Date :
2018-09-20 11:14:39 |
By :
phatstype |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 03
|