ยินดีต้อนรับคุณ, บุคคลทั่วไป กรุณา เข้าสู่ระบบ หรือ ลงทะเบียน

เข้าสู่ระบบด้วยชื่อผู้ใช้ รหัสผ่าน และระยะเวลาในเซสชั่น

ThaiSEOBoard.comพัฒนาเว็บไซต์Programmingสอบถาม php การตัดสต็อกที่ละ row ครับ
หน้า: [1]   ลงล่าง
พิมพ์
ผู้เขียน หัวข้อ: สอบถาม php การตัดสต็อกที่ละ row ครับ  (อ่าน 6416 ครั้ง)
0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้
JumDaiDee
สมุนแก๊งเสียว
*

พลังน้ำใจ: 18
ออฟไลน์ ออฟไลน์

กระทู้: 566



ดูรายละเอียด
« เมื่อ: 27 เมษายน 2015, 16:21:10 »

สวัสดีครับ แนะนำ หน่อยครับ

ผมมีขอมูล db อยู่ว่า

id    สินค้า     ราคา    คงเหลือ
1        A         2        10
2        A         3         5
3        A         2         8

แต่ผมต้องเบิกสินค้า A จำนวน 13 ชิ้น

ผมต้องเขียน php check ตัดสต็อกอย่างไร ครับเพื่อใน db กลายเป็นแบบ
id    สินค้า     ราคา    คงเหลือ
1        A         2        0
2        A         3        2
3        A         2        8
« แก้ไขครั้งสุดท้าย: 27 เมษายน 2015, 16:21:51 โดย JumDaiDee » บันทึกการเข้า

สินค้าออนไลน์ https://www.shoppook.com/product | โปรแกรมออนไลน์ : https://appnon.com
sputtaro
สมุนแก๊งเสียว
*

พลังน้ำใจ: 139
ออฟไลน์ ออฟไลน์

กระทู้: 910



ดูรายละเอียด
« ตอบ #1 เมื่อ: 27 เมษายน 2015, 16:33:38 »

ข้อเท็จจริง
ยูสเซอร์ เลือกสินค้า
id 1 จำนวน 10 เก็บไว้ใน อาเรย์ ชื่อ productsid
id 2 จำนวน 3 เก็บไว้ใน อาเรย์ ชื่อ productsid


******************
คำสั่ง
foreach productsid as pid
update tablename set คงเหลือ = (คงเหลือ-pid[1]) where id=pid[0]

*****************

แนวทางเท่านั้นนะครับ
คิดว่า คำสั่งใช้งานจริง พวก foreach กับ update ท่านคงเข้าใจอยู่แล้ว
หัวใจมันน่าจะอยู่ที่ การเก็บอาเรย์ ว่าตั้งค่าอาเรย์ ไว้ยังไง
รวมทั้งจะเก็บไว้วิธีอื่นๆก็ได้ ไม่จำเป็นต้องอาเรย์เสมอไป

ไม่รู้ตรงกับที่ต้องไหม

***
แก้ไขเพื่อไม่ให้งุนงง สับสนครับ
« แก้ไขครั้งสุดท้าย: 27 เมษายน 2015, 16:38:40 โดย sputtaro » บันทึกการเข้า
JumDaiDee
สมุนแก๊งเสียว
*

พลังน้ำใจ: 18
ออฟไลน์ ออฟไลน์

กระทู้: 566



ดูรายละเอียด
« ตอบ #2 เมื่อ: 27 เมษายน 2015, 16:48:33 »

อ๋อ ยูเซอ ไม่ได้เลิอกสินค้า ที่ละรายการครับ
เค้าต้องการแค่ สินค้า A จำนวน 13 ชิ้นเลยครับ

ผมเลยติดตรง ที่ว่าจะเช็คยังไง กับ id ไปเรื่อย

เช่น
if (13 เช็คการับ id1)
{
    มีสินค้า ไม่พอ จากนั้น ก็ update เป็น 0 เพราะเอาหมด
}

ตอนนี้ ได้มา แค่ 10 ต้องการอีก 3

if (13 เช็คการับ id2)
{
    มีสินค้า มีเกิน จากนั้น ก็ update เป็น 2 เพราะต้องการแค่ 3
}

จุดนนี้แหละครับ พี่ผมไม่เข้า ใจว่า ต้องเขียน เก็บค่า i++ อะไร คือ เขียน array เก็บเช็คอย่างไร
เพราะ ผมคิดว่า โปรแกรม มันสนใจ id ต้องแค่สินค้า A ไม่ได้สน ไอดี ผมก็เลยติดที่ ทำให้โปรแกรมมันไล่เช็คนี่แหละครับ

ส่วน add uplade ผมทำได้อยู่ครับ ติดที่กรณี ด้านบนจริงๆ ครับผม
« แก้ไขครั้งสุดท้าย: 27 เมษายน 2015, 16:49:41 โดย JumDaiDee » บันทึกการเข้า

สินค้าออนไลน์ https://www.shoppook.com/product | โปรแกรมออนไลน์ : https://appnon.com
sputtaro
สมุนแก๊งเสียว
*

พลังน้ำใจ: 139
ออฟไลน์ ออฟไลน์

กระทู้: 910



ดูรายละเอียด
« ตอบ #3 เมื่อ: 27 เมษายน 2015, 16:52:11 »

นั่นสิครับ ผมก็นึกแล้ว ไม่น่ายากเกินไปสำหรับท่าน แต่ที่ไม่ได้ มันน่าจะยากกว่านี้


*******
กรณีนี้อาจต้องวนลูปไปหลายครั้ง เพราะในอนาคต จำนวนสินค้าอาจไม่พอแค่ 2 แถว ( อาจมี 3 - 4 แถว หรือมากกว่าก็ได้ )

ไอเดียนะครับ  userselect= จำนวนสินค้าที่ยูเซอร์เลือก
1. เช็ค ตาราง เลือก A ทีละแถว ได้ผลลัพภ์เท่าไหร่ --> $result=ผลลัพภ์
2. $remain= userselect-$result
3. if(! remain==0) select again
4. loop 1-3 until ( remain==0)

ขอตอบแค่นี้แล้วกัน กลัวปล่อยไก่
« แก้ไขครั้งสุดท้าย: 27 เมษายน 2015, 17:03:47 โดย sputtaro » บันทึกการเข้า
smapan
Global Moderator
เจ้าพ่อบอร์ดเสียว
*****

พลังน้ำใจ: 643
ออฟไลน์ ออฟไลน์

กระทู้: 8,272



ดูรายละเอียด เว็บไซต์
« ตอบ #4 เมื่อ: 27 เมษายน 2015, 16:59:39 »

ที่ร้านใช้ระบบบาร์โค้ด ก็มีอาการแบบนี้เหมือนกันครับ
เลยให้ใช้บาร์โค้ดแยกกันเลยครับ แ่ชื่อสินค้าเดียวกัน
แบบนี้ ราคาจะต่างกัน อื่นๆต่างกันได้หมด ระบบมองเป็นคนละตัว แต่ user ไม่รู้ครับ
บันทึกการเข้า

จูมล่าโฮส สยามโฮสเว็บ modty.com
รวมที่พัก เช่ารายวัน ที่พักเช่ารายเดือนมากที่สุดแจ่มจริง
***Tel 083-757-1515 ติดปัญหา Joomla ตรงไหนรับปรึกษาฟรี โทรมาเถอะครับ ถ้าตอบได้ช่วยแน่นอน ไม่มีกั้ก. ***
JumDaiDee
สมุนแก๊งเสียว
*

พลังน้ำใจ: 18
ออฟไลน์ ออฟไลน์

กระทู้: 566



ดูรายละเอียด
« ตอบ #5 เมื่อ: 27 เมษายน 2015, 17:07:57 »

สังเกตุ ไหมครับ ทำไม ผมถึงทำระบบสต็อกให้มันยาก เพราะ

ถึงแม้สินค้า จะชนิดเดียวกัน แบบเดียว กับ การซื้อ เดือนนี้ กับ เดือนหน้า มันซื้อมา ราคาไม่เท่ากัน ครับ
db ก็เลย สินค้า แบบเดียวกัน แต่มีหลายราคา

และเวลา เบิก ผมก็จะเบิก แบบ เข้าก่อนออกก่อน หรือ fifo

เพราะเวลาไปทำรายงานผมว่า มันข้อมูลถูกต้องกว่า ตรงที่ว่า

วันนี้ เบิก สินค้าตัวนี้แหละ ของราคา อันถูกหรือ อันแพง ไปใช้ก่อน

เอาละ เรามาเข้าเรื่องเดิม อิอิ เรื่องการ เขียน check วนลูป ของ db กันครับ
พี่ท่านใด เก่งแนะนำ ด้วยครับ ท่านข้างบน ผม +1 ให้แล้วครับ
บันทึกการเข้า

สินค้าออนไลน์ https://www.shoppook.com/product | โปรแกรมออนไลน์ : https://appnon.com
9keepgoing
ก๊วนเสียว
*

พลังน้ำใจ: 22
ออฟไลน์ ออฟไลน์

กระทู้: 265



ดูรายละเอียด
« ตอบ #6 เมื่อ: 27 เมษายน 2015, 17:26:01 »

ลองดู

buy = 13
loop data where id = a order by asc
if total >= buy
net = total - buy.
update data set total = net where id = loop index
exit
else
net = buy - total.
buy = net
update data set total = net where id = loop index
endif
บันทึกการเข้า

DEVELOPER & CONSULTANT(ONLINE MARKETING)
ยิ้มโค้ด.คอม
สมุนแก๊งเสียว
*

พลังน้ำใจ: 83
ออฟไลน์ ออฟไลน์

กระทู้: 729



ดูรายละเอียด เว็บไซต์
« ตอบ #7 เมื่อ: 27 เมษายน 2015, 17:30:14 »

อันนี้แนวคิดของผมเท่าที่มองภาพออกน่ะครับ
โค๊ด:
$order=13;
$sql="select id, คงเหลือ from ตาราง where product='A' and คงเหลือ>0 order by id asc";
$res=mysql_query($sql);
while($arr=mysql_fetch_assoc($res)){
  $id=$arr['id']; $stock=$arr['คงเหลือ'];
  if($stock >= $order){ mysql_query("update ตาราง set คงเหลือ=คงเหลือ-$order where id='$id'"); break;} //ถ้าสต๊อก id เหลือพอตัดได้ทั้งหมด ตัดยอดแล้วให้ออกจาก loop
  else{ mysql_query("update ตาราง set คงเหลือ=คงเหลือ-$order where id='$id'"); $order=$order-$stock; } //ถ้าสต๊อก id นี้เหลือไม่พอตัด ให้ตัดยอดแล้ววน loop ต่อไป
}

อันนี้ผมวิเคราะห์ตามที่เห็นน่ะครับ แนะนำให้ทดลองจากข้อมูลทดสอบ คาดว่าน่าจะ logic ประมาณนี้มั้งครับ
บันทึกการเข้า

ngokung
ก๊วนเสียว
*

พลังน้ำใจ: 45
ออฟไลน์ ออฟไลน์

กระทู้: 377



ดูรายละเอียด
« ตอบ #8 เมื่อ: 27 เมษายน 2015, 23:23:40 »

สังเกตุ ไหมครับ ทำไม ผมถึงทำระบบสต็อกให้มันยาก เพราะ

ถึงแม้สินค้า จะชนิดเดียวกัน แบบเดียว กับ การซื้อ เดือนนี้ กับ เดือนหน้า มันซื้อมา ราคาไม่เท่ากัน ครับ
db ก็เลย สินค้า แบบเดียวกัน แต่มีหลายราคา

และเวลา เบิก ผมก็จะเบิก แบบ เข้าก่อนออกก่อน หรือ fifo

เพราะเวลาไปทำรายงานผมว่า มันข้อมูลถูกต้องกว่า ตรงที่ว่า

วันนี้ เบิก สินค้าตัวนี้แหละ ของราคา อันถูกหรือ อันแพง ไปใช้ก่อน

เอาละ เรามาเข้าเรื่องเดิม อิอิ เรื่องการ เขียน check วนลูป ของ db กันครับ
พี่ท่านใด เก่งแนะนำ ด้วยครับ ท่านข้างบน ผม +1 ให้แล้วครับ

ส่วนตัวแล้วผมมองว่า การออกรายงาน คุณสามารถเขียนโปรแกรมให้มันออกมาง่ายได้นะครับ เพราะยังไงระบบมันก็ FIFO อยู่่แล้ว (นั่นหมายความว่า ถ้าสินค้าเหลือ 100 ชิ้น ก็นับจากการซื้อครั้งหลังสุดมาให้ครบ 100 ชิ้น ก็จะรู้ว่า สินค้าที่เหลืออยู่มีต้นทุนเท่าไรกันแน่)

ผมมองว่าการแยก record ของสินค้า เป็นการทำข้อมูลซ้ำซ้อน ถ้าจะแก้ไขอะไร (เช่น Description) ต้องมานั่งไล่ทุก record

ถ้าทำแบบนี้จะดีกว่าไหมครับ
1. สร้าง table เก็บว่าซื้อสินค้าเข้ามาเมื่อไร (เป็น table สั่งซื้อเข้าอย่างเดียว โดยมี id ของ table เอง, id ของสินค้า, ราคาที่สั่งซื้อเข้ามาในงวดนั้น) ซึ่งถ้าสั่งซื้อสินค้าเข้ามาเมื่อไร ก็เก็บ record ไว้ทุกครั้ง

2. สร้าง table สินค้า เอาไว้บอกว่า สินค้า ชื่ออะไร รหัสอะไร มี description ว่ายังไง มี stock กี่ชิ้น

3. สร้าง table ใบสั่งซื้อของลูกค้าเรา แล้วก็เก็บข้อมูลการขายปกติ (ทุกใบสั่งซื้อ ก็สามารถไปหัก stock ได้เลย เพราะจำนวนทั้งหมดเก็บอยู่ใน ข้อ2 record เดียวอยู่แล้ว)

พอตอนออกรายงาน คุณค่อยมาเขียนโปรแกรม เอาใบสั่งซื้อมาเช็คว่าจริง ๆ แล้วกำไรเท่าไรกันแน่

ปล.จริง ๆ ผมว่าวิธีนี้ก็คือ วิธีปกติทั่ว ๆ ไปแหละนะ
« แก้ไขครั้งสุดท้าย: 27 เมษายน 2015, 23:28:46 โดย ngokung » บันทึกการเข้า
JumDaiDee
สมุนแก๊งเสียว
*

พลังน้ำใจ: 18
ออฟไลน์ ออฟไลน์

กระทู้: 566



ดูรายละเอียด
« ตอบ #9 เมื่อ: 28 เมษายน 2015, 09:39:52 »

ขอบคุณพี่ๆ ที่ให้คำแนะนำ +1 ทุกท่านครับ ผมทำได้แล้วครับ

อ้างถึง
$total = 13;

if ($row->quantity >= $total)
{   
   $pickAmount = $row->quantity - $total;
   //update
    break;

} else {

    $pickAmount = $row->quantity;
    $total     -= $row->quantity;

    //update
}

ถ้าว่าผมออกแบบ database ยังไง จริงผมแยก table สินค้า กับ table สั่งซื้อ ไว้อยู่แล้ว
แต่ก็ขอบพระคุณพี่ ngokung เป็นอย่างมากครับ เพราะทำให้ผมได้ ไอเดีย ไปอีกแนว และสำหรับ ท่านที่สนสนใจ

เพราะให้เข้าใจ ผมเลยยกตัวอย่างง่าย ครับ ส่วนตัวผมเก็บ table แบบนี้ครับ
1. stock ชื่อสินค้าและรายละเอียดต่างๆ

2. po ใบสั่งซื้อ
3. po_item รายการสั่งซื้อ

4. receive ใบรับสินค้า กรณีทยอยรับ แล้วสินค้าที่รับไม่เท่ากับใบ สั่งซื้อ
5. receive_item รายการที่รับ

6. picking ใบเบิกสินค้า
7. picking_item รายการที่เบิก

8. picking_item_has_receive_item เอาไว้เก็บ log ว่าเบิกมากจาก receive_item ของ id ไหน จำนวนเท่าไหร่ ครับ

ขอบคุณพี่ทุกคนมากครับ ที่สละเวลามาช่วยเหลือ  wanwan017 wanwan017
« แก้ไขครั้งสุดท้าย: 28 เมษายน 2015, 09:41:24 โดย JumDaiDee » บันทึกการเข้า

สินค้าออนไลน์ https://www.shoppook.com/product | โปรแกรมออนไลน์ : https://appnon.com
Gunamaiza
Newbie
*

พลังน้ำใจ: 0
ออฟไลน์ ออฟไลน์

กระทู้: 9



ดูรายละเอียด
« ตอบ #10 เมื่อ: 09 เมษายน 2017, 02:11:24 »

ขอบสอบถามเพิ่มหน่อยคับ ขออนุญาติจขกทดเวยนะครับ
หากเราจะทำระบบ
เพิ่มเครดิตให้สมาชิกแล้วให้สมาชิกสามรถนำเครดิตที่เราให้ไปซื้อของในเว็บเราต้องทำแบบไหนบ้างครับพอมีแนวทางไหมครับ php
บันทึกการเข้า
nuonly
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 143
ออฟไลน์ ออฟไลน์

กระทู้: 2,694



ดูรายละเอียด
« ตอบ #11 เมื่อ: 09 เมษายน 2017, 07:49:05 »

ช่วยดันครับ wanwan013
บันทึกการเข้า

หน้า: [1]   ขึ้นบน
พิมพ์