Hiển thị kết quả từ 1 đến 9 / 9
  1. #1
    Tham gia
    27-03-2011
    Bài viết
    39
    Like
    0
    Thanked 0 Times in 0 Posts

    Câu hỏi, cần giúp đỡ Hỏi về câu lệnh SQL

    Nhờ các bác giúp tôi một chút

    Đây là một bảng dùng để quản lý hàng tồn kho, có dạng :

    Mã hàng Số lượng Giờ Ngày
    AAA 1000 21:30:08 05/24/2011
    BBB 3000 21:05:31 05/24/2011
    AAA 1500 20:10:22 05/24/2011
    AAA 1800 20:00:46 05/24/2011
    CCC 2200 19:28:52 05/24/2011
    BBB 2600 19:16:23 05/24/2011
    CCC 1500 19:07:46 05/24/2011
    CCC 3200 19:03:55 05/24/2011
    BBB 2600 18:11:31 05/24/2011

    Số lượng từng mặt hàng sẽ tăng hoặc giảm tùy theo tình hình nhập/xuất. Bây giờ nếu muốn lấy ra số lượng mỗi mặt hàng vào cuối ngày 24/05, sẽ cần lấy ra các records AAA, BBB, CCC ở thời điểm cuối cùng trong ngày mà chúng chịu tác động tăng/giảm.

    Vậy, phải viết câu lệnh SQL như thế nào để cho ra kết quả mong muốn mà không phải truy vấn nhiều lần theo từng mã hàng?
    Quote Quote

  2. #2
    Tham gia
    14-12-2008
    Bài viết
    1,343
    Like
    16
    Thanked 10 Times in 10 Posts
    thường khi xây dựng bảng , người ta nhóm chung cột date với time chung. sử dụng kiểu datetime .
    từ cột datetime , chỉ vài dòng php đơn giản đều có thể xuất ra time or date or anything dễ dàng.

    vấn đề của bạn giờ chỉ còn là order by blah blah blah

    tham khảo mysql datetime

  3. #3
    Tham gia
    27-03-2011
    Bài viết
    39
    Like
    0
    Thanked 0 Times in 0 Posts
    Quote Được gửi bởi ngoc_viet08 View Post
    thường khi xây dựng bảng , người ta nhóm chung cột date với time chung. sử dụng kiểu datetime .
    từ cột datetime , chỉ vài dòng php đơn giản đều có thể xuất ra time or date or anything dễ dàng.

    vấn đề của bạn giờ chỉ còn là order by blah blah blah

    tham khảo mysql datetime

    Đấy là tôi minh họa như nhìn từ phía ngoài giao diện người dùng, còn trong db thì phải timestamp hết chứ bác.

    Cái khó ở đây là làm sao tối ưu hóa câu lệnh SQL. Nếu phải dùng 3 câu lệnh cho 3 sản phẩm để lấy ra con số tồn kho cuối ngày của sản phẩm đó thì không ổn. Vì thực tế có hàng ngàn mặt hàng chứ không ít.

    Nếu phải thiết kế lại db thì theo các bác nên thiết kế thế nào cho mục đích trên dễ đạt được?

  4. #4
    Tham gia
    25-03-2008
    Bài viết
    235
    Like
    0
    Thanked 2 Times in 2 Posts
    Quote Được gửi bởi gyarcier View Post
    Nhờ các bác giúp tôi một chút
    Thử viết như thế này xem có OK ko nhé.
    Code:
    SELECT t.*, t2.SoLuong
    FROM (
        SELECT t1.MaHang, MAX(t1.NgayGio) AS LastTime
        FROM `hanghoa` AS t1
        WHERE DATE(t1.NgayGio) = '2011-05-24'
        GROUP BY t1.MaHang, DATE(t1.NgayGio)
    ) AS t
    INNER JOIN `hanghoa` AS t2 ON t2.MaHang = t.MaHang
    AND t2.NgayGio = t.LastTime

  5. #5
    Tham gia
    26-11-2007
    Bài viết
    247
    Like
    0
    Thanked 0 Times in 0 Posts
    Hic, cái bảng tồn kho này tui mới thấy. Quản lý kiểu này rối còn hơn là không quản lý

  6. #6
    Tham gia
    27-03-2011
    Bài viết
    39
    Like
    0
    Thanked 0 Times in 0 Posts
    Cảm ơn bạn, fotech_nd, để tớ thử xem thế nào. Chưa bao giờ tớ viết nổi 1 câu lệnh SQL phức tạp như vậy

    @ suutamcongnghe : bạn có kinh nghiệm thì gợi ý cho tớ chút, đang bí. Project này khá độc đáo, yêu cầu dạng webApp, dùng Javascript/Gear DB để làm việc trên web browser, không có server script gì cả Đúng sở trường nên tớ nhận đại. Nhưng mà chưa có kinh nghiệm quản lý kho bao giờ. Chỉ biết đại khái về xuất-nhập-tồn, tạm thời làm thử mấy cái bảng lưu lại từng sự kiện trong ngày xem sao đã.

  7. #7
    Tham gia
    26-11-2007
    Bài viết
    247
    Like
    0
    Thanked 0 Times in 0 Posts
    Theo mình thì có 2 table chính là NHẬP & XUẤT (2 bảng chính, chi tiết thì phải có 2 bảng phụ kèm theo là CHITIẾTNHẬP & CHITIẾTXUẤT, ở đây mình chỉ nói chung thôi nha)
    Trong đó có các field là ID, Mãhàng, Sốlượng, Đơngiá, Ngày (tất nhiên là có giờ)
    Và 1 query TỒN. Cái tồn này, cần lúc nào thì query lúc đó.

  8. #8
    Tham gia
    14-12-2008
    Bài viết
    1,343
    Like
    16
    Thanked 10 Times in 10 Posts
    hình như cậu lưu data dạng :
    số tồn sản phẩm x ngày 1-1-2011 là 300
    số tồn sản phẩm x ngày 2-1-2011 là 500
    số tồn sản phẩm y ngày 2-1-2011 là 300
    số tồn sản phẩm x ngày 3-1-2011 là 200
    ...

    mỗi lần nhập xuất sẽ lấy số tồn mới nhất rồi +/- rùi save lại.

    nếu làm vậy thì cậu làm phức tạp bài toán ,thường người ta sẽ build table theo dạng action
    nhập 300 sản phẩm x ngày 1-1-2011
    xuất 200 sản phẩm x ngày 2-1-2011
    nhập 300 sản phẩm y ngày 3-1-2011
    xuất 100 sản phẩm x ngày 4-1-2011

    và 1 table khác
    sản phẩm x hiện thời là 1000
    sản phẩm y hiện thời là 1500

    như vậy các query đơn giản và dễ tính toán.

  9. #9
    Tham gia
    27-03-2011
    Bài viết
    39
    Like
    0
    Thanked 0 Times in 0 Posts
    Cảm ơn các bác đã gợi ý

Bookmarks

Quy định

  • Bạn không thể tạo chủ đề mới
  • Bạn không thể trả lời bài viết
  • Bạn không thể gửi file đính kèm
  • Bạn không thể sửa bài viết của mình
  •