09/10/2018, 23:55

Help! [PHP] Làm sao để xác định vị trí của 1 đối tượng nào đó

Ví dụ mình có bảng danh sách hàng bán có dữ liệu gồm các cột (Mysql nhé) như sau: id, name, price, soluongdaban, soluongcon
Bây giờ có giá trị lần lượt như sau:

id - name - price - soluongdaban - soluongcon

1 - A - 300 - 3 - 10
2 - B - 400 - 1 - 20
.....

500 - C - 55 - 12 - 70
501 - D - 100 - 20 - 90

Giả sử mình muốn lấy ngẫu nhiên 1 giá trị nào đó, ví dụ mình lấy sản phẩm C chẳng hạn, thì mình biết cách query rồi.
PHP Code:
$q $mysql->query("SELECT * FROM ".$tb_prefix."sanpham WHERE sanpham_name = '"C"'"); 
Vậy bây giờ mình muốn biết xem là mặt hàng C này nó đứng thứ mấy trong dãy toàn bộ hàng mình có xếp theo chiều giảm dần của cột số lượng đã bán (column soluongdaban)

Please help. Cảm ơn nhiều

Quên không nói rõ là dùng PHP.
3do viết 01:55 ngày 10/10/2018
giả sử $sl là số lượng đã bán của sản phẩm C

SELECT COUNT(*)+1 FROM sanpham WHERE soluongdaban >= $sl

sẽ cho ra vị trí của sản phẩm C trong danh sách. Tuy vậy, tôi nghĩ vị trí này vẫn còn có 1 cái gì đó chưa chính xác (số lượng đã bán giống nhau?)

bạn nên test lại xem sao
huyhoa viết 02:00 ngày 10/10/2018
Được gửi bởi 3do
giả sử $sl là số lượng đã bán của sản phẩm C

SELECT COUNT(*)+1 FROM sanpham WHERE soluongdaban >= $sl

sẽ cho ra vị trí của sản phẩm C trong danh sách. Tuy vậy, tôi nghĩ vị trí này vẫn còn có 1 cái gì đó chưa chính xác (số lượng đã bán giống nhau?)

bạn nên test lại xem sao
wow, thanks bạn, đó cũng là vấn đề mình muốn hỏi mà
theo ý bạn thì sản phẩm sẽ đếm là những sản phẩm có số lượng bán lớn hơn số đã bán của sản phẩm C, vậy, phải trừ 1 chứ nhỉ, sao lại cộng 1 để ra kq?
Mình cũng đang phân vân, vì nếu cùng = nhau về số sản phẩm bán đc sẽ xếp theo ABC.
huyhoa viết 02:03 ngày 10/10/2018
Được gửi bởi lkn2
Bạn cần phải biết số lượng bạn của nó thì mới biết vị trí của nó được. Không biết bạn cần như vậy để làm gì, khó mà giải quyết được với dữ liệu như vậy.

Có thể lấy dữ liệu xếp giảm dần theo số lượng bán, sau đó lặp qua đến khi nào gặp thằng sản phẩm C, có số id như vậy thì sẽ biết được. Tuy nhiên cách này không hay với dữ liệu lớn.
lkn chỉ rõ hơn cho tớ đc ko? đang cần, dữ liệu ko lớn lắm, chỉ khoảng ....5000 sản phẩm

Tất nhiên là mình có thể biết số lượng bán của sản phẩm C mà, và tất cả các sản phẩm khác nữa, nó đc lưu trong cột soluongban mà
Không biết bạn cần như vậy để làm gì,
Mình cần để thống kê và theo dõi xem mặt hàng nào bán chạy. Nhưng chủ yếu lấy giá trị để thống kê
zmt264 viết 02:01 ngày 10/10/2018
Được gửi bởi huyhoa
Ví dụ mình có bảng danh sách hàng bán có dữ liệu gồm các cột (Mysql nhé) như sau: id, name, price, soluongdaban, soluongcon
Bây giờ có giá trị lần lượt như sau:

id - name - price - soluongdaban - soluongcon

1 - A - 300 - 3 - 10
2 - B - 400 - 1 - 20
.....

500 - C - 55 - 12 - 70
501 - D - 100 - 20 - 90

Giả sử mình muốn lấy ngẫu nhiên 1 giá trị nào đó, ví dụ mình lấy sản phẩm C chẳng hạn, thì mình biết cách query rồi.
PHP Code:
$q $mysql->query("SELECT * FROM ".$tb_prefix."sanpham WHERE sanpham_name = '"C"'"); 
Vậy bây giờ mình muốn biết xem là mặt hàng C này nó đứng thứ mấy trong dãy toàn bộ hàng mình có xếp theo chiều giảm dần của cột số lượng đã bán (column soluongdaban)

Please help. Cảm ơn nhiều
Nên đọc cuốn "áp dụng Toán vào DB" Applied Mathematics for Database Professionals (Expert's Voice) . Apress Mới xuất bản
huyhoa viết 02:09 ngày 10/10/2018
Được gửi bởi zmt264
Nên đọc cuốn "áp dụng Toán vào DB" Applied Mathematics for Database Professionals (Expert's Voice) . Apress Mới xuất bản
hic, tớ dùng php lập trình mà, ý bạn nói là ngôn ngữ nào thế (quyến sách đó á)
zmt264 viết 01:58 ngày 10/10/2018
Được gửi bởi huyhoa
hic, tớ dùng php lập trình mà, ý bạn nói là ngôn ngữ nào thế (quyến sách đó á)
gu-gồ íp iu cen.

okie, đó là 1 quyển sách về cách suy luận trong khi viết query. Tự tìm nha: tên sách + rar. Thực ra cũng ko nên đọc mấy quyển thuộc hệ expert voice đó, mà nếu cứ gặp đi gặp lại các vấn đề hóc búa thì cũng nên đọc xem người ta viết gì (tiếng Anh, tất nhiên). Dù bạn dùng PHP hay bất cứ ngôn ngữ lập trình nào , với bất kỳ db gì, thì cách tư duy của bạn (về query) vẫn ko đổi.

Mình stop đây, bb.

Được gửi bởi sách viết
We welcome this contribution to the database literature. It is another book on the theory and practice of relational databases, but this one is interestingly different. The bulk of the book is devoted to a treatment of the theory. The treatment is not only rigorous and mathematical, but also rather more approachable than some other texts of this kind. The authors clearly recognize, as we do, the importance of logic and mathematics if database study is to be taken seriously.
3do viết 02:10 ngày 10/10/2018
Được gửi bởi huyhoa
wow, thanks bạn, đó cũng là vấn đề mình muốn hỏi mà
theo ý bạn thì sản phẩm sẽ đếm là những sản phẩm có số lượng bán lớn hơn số đã bán của sản phẩm C, vậy, phải trừ 1 chứ nhỉ, sao lại cộng 1 để ra kq?
Mình cũng đang phân vân, vì nếu cùng = nhau về số sản phẩm bán đc sẽ xếp theo ABC.
sorry, đúng là -1 hoặc COUNT(*). Tại lúc đó 1h sáng nên đuối quá
3do viết 02:11 ngày 10/10/2018
Được gửi bởi huyhoa
lkn chỉ rõ hơn cho tớ đc ko? đang cần, dữ liệu ko lớn lắm, chỉ khoảng ....5000 sản phẩm

Tất nhiên là mình có thể biết số lượng bán của sản phẩm C mà, và tất cả các sản phẩm khác nữa, nó đc lưu trong cột soluongban mà


Mình cần để thống kê và theo dõi xem mặt hàng nào bán chạy. Nhưng chủ yếu lấy giá trị để thống kê
khi cập nhật số lượng đã bán, tạo 1 table temp (TEMPORARY) có 2 cột (position, sp_id) trong đó position auto increment

INSERT INTO temp (sp_id) SELECT id FROM sanpham ODER BY soluongsanpham DESC, name ASC

(tôi không sure lắm về syntax chỗ order by)

lúc này position của của temp sẽ là vị trí bạn muốn lấy. Với 5000 sp, có lẽ nên sử dụng type = HEAP
Thanh duc viết 02:05 ngày 10/10/2018
SELECT count(DISTINCT daban) as vitri FROM sanpham WHERE daban>=$slb
Bài liên quan
0