ThaiSEOBoard.com

พัฒนาเว็บไซต์ => Programming => ข้อความที่เริ่มโดย: JumDaiDee ที่ 27 เมษายน 2015, 16:21:10



หัวข้อ: สอบถาม php การตัดสต็อกที่ละ row ครับ
เริ่มหัวข้อโดย: JumDaiDee ที่ 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


หัวข้อ: Re: สอบถาม php การตัดสต็อกที่ละ row ครับ
เริ่มหัวข้อโดย: sputtaro ที่ 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 ท่านคงเข้าใจอยู่แล้ว
หัวใจมันน่าจะอยู่ที่ การเก็บอาเรย์ ว่าตั้งค่าอาเรย์ ไว้ยังไง
รวมทั้งจะเก็บไว้วิธีอื่นๆก็ได้ ไม่จำเป็นต้องอาเรย์เสมอไป

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

***
แก้ไขเพื่อไม่ให้งุนงง สับสนครับ


หัวข้อ: Re: สอบถาม php การตัดสต็อกที่ละ row ครับ
เริ่มหัวข้อโดย: JumDaiDee ที่ 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 ผมทำได้อยู่ครับ ติดที่กรณี ด้านบนจริงๆ ครับผม


หัวข้อ: Re: สอบถาม php การตัดสต็อกที่ละ row ครับ
เริ่มหัวข้อโดย: sputtaro ที่ 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)

ขอตอบแค่นี้แล้วกัน กลัวปล่อยไก่


หัวข้อ: Re: สอบถาม php การตัดสต็อกที่ละ row ครับ
เริ่มหัวข้อโดย: smapan ที่ 27 เมษายน 2015, 16:59:39
ที่ร้านใช้ระบบบาร์โค้ด ก็มีอาการแบบนี้เหมือนกันครับ
เลยให้ใช้บาร์โค้ดแยกกันเลยครับ แ่ชื่อสินค้าเดียวกัน
แบบนี้ ราคาจะต่างกัน อื่นๆต่างกันได้หมด ระบบมองเป็นคนละตัว แต่ user ไม่รู้ครับ


หัวข้อ: Re: สอบถาม php การตัดสต็อกที่ละ row ครับ
เริ่มหัวข้อโดย: JumDaiDee ที่ 27 เมษายน 2015, 17:07:57
สังเกตุ ไหมครับ ทำไม ผมถึงทำระบบสต็อกให้มันยาก เพราะ

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

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

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

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

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


หัวข้อ: Re: สอบถาม php การตัดสต็อกที่ละ row ครับ
เริ่มหัวข้อโดย: 9keepgoing ที่ 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


หัวข้อ: Re: สอบถาม php การตัดสต็อกที่ละ row ครับ
เริ่มหัวข้อโดย: ยิ้มโค้ด.คอม ที่ 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 ประมาณนี้มั้งครับ


หัวข้อ: Re: สอบถาม php การตัดสต็อกที่ละ row ครับ
เริ่มหัวข้อโดย: ngokung ที่ 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 เดียวอยู่แล้ว)

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

ปล.จริง ๆ ผมว่าวิธีนี้ก็คือ วิธีปกติทั่ว ๆ ไปแหละนะ


หัวข้อ: Re: สอบถาม php การตัดสต็อกที่ละ row ครับ
เริ่มหัวข้อโดย: JumDaiDee ที่ 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:


หัวข้อ: Re: สอบถาม php การตัดสต็อกที่ละ row ครับ
เริ่มหัวข้อโดย: Gunamaiza ที่ 09 เมษายน 2017, 02:11:24
ขอบสอบถามเพิ่มหน่อยคับ ขออนุญาติจขกทดเวยนะครับ
หากเราจะทำระบบ
เพิ่มเครดิตให้สมาชิกแล้วให้สมาชิกสามรถนำเครดิตที่เราให้ไปซื้อของในเว็บเราต้องทำแบบไหนบ้างครับพอมีแนวทางไหมครับ php


หัวข้อ: Re: สอบถาม php การตัดสต็อกที่ละ row ครับ
เริ่มหัวข้อโดย: nuonly ที่ 09 เมษายน 2017, 07:49:05
ช่วยดันครับ :wanwan013: