10/10/2018, 11:31

[PHP] Giúp mình bài toán này

Xin chào tất cả các bạn!
Mình đang gặp một chút rắc rối với PHP và mong mọi người có thể giúp mình bài toán này.
Mình có MySQL database như hình dưới




Đây là chương trình nhắn tin chọn quà dành cho các thuê bao
- Mỗi tuần có 1 giải nhất
- 1 giải nhì
- 5 giải ba
Cho thuể bao có số dự đoán (number) gần đúng nhất (So với tổng các thuê bao nhắn tin hợp lệ trong database).
- Nếu 2 hoặc nhiều thuê bao có số dự đoán trùng nhau thì thuê bao nhắn tin sớm nhất (sender_time) là người chiến thắng.

- Rắc rối của mình gặp phải là yêu cầu lấy tiệm cận 2 bên (Thuê bao có số dự đoán gần đúng dưới và gần đúng trên). Ví dụ có 20 người dự đoán, thì người có số dự đoán <= 20 và > 20 đều được tính

- Mình đã chia ra 3 trường hợp
1, Không có số người dự đoán <= 20
2, Không có người dự đoán > 20

Hai trường hợp này thì mình đã làm được
//TH 1
$qr = "select * from table where game_id='$game' and gift_id='".$gift_id."' and number <= 20 order by number desc, sender_time asc limit 7";
//TH 2
$qr = "select * from table where game_id='$game' and gift_id='".$gift_id."' and number > 20 order by number asc, sender_time asc limit 7";

* Trường hợp 3: số dự đoán <= 20 và > 20

Bạn nào có thể giợi ý giúp mình cách giải quyết cho trường hợp này không??
Cảm ơn các bạn!
bvnguyen viết 13:34 ngày 10/10/2018
có số kết quả là 20

đã tìm được:
- người gần đúng nhất và lớn hơn 20
- người gần đúng nhất và nhỏ hơn 20

lấy 2 thằng này trừ 20, sẽ ra thằng nào gần đúng nhất chứ j nữa nhỉ
mrdinh viết 13:40 ngày 10/10/2018
Nếu lấy 1 người thì dễ bác ah, cái khó ở đây là cần Lấy ra 7 người
1 giải nhất
1 giải nhì
5 giải ba
Giả sử mình có dãy:
10 15 18 9 (20) 29 30 45 47 36
Có cách nào để tìm ra 7 số gần 20 nhất không??
Em đã từng nghĩ là tìm ra người giải nhất > Tìm người giải nhì > Tìm lần lượt 5 người giải 3, nhưng như thế thì không khả thi, code tùm lum mất.
DotNetViet viết 13:41 ngày 10/10/2018
SELECT TOP 7 Id, ABS(number-20) FROM tableName ORDER BY ABS(number-20)

PS: ABS là lấy trị tuyệt đối
sonnb viết 13:40 ngày 10/10/2018
Được gửi bởi DotNetViet
SELECT TOP 7 Id, ABS(number-20) FROM tableName ORDER BY ABS(number-20)

PS: ABS là lấy trị tuyệt đối
Query của bạn là cho MSSQL bạn à.

Mình đã trả lời chủ topic bên kia rồi nhé.
ToiYeuVietNam99 viết 13:38 ngày 10/10/2018
Được gửi bởi sonnb
Query của bạn là cho MSSQL bạn à.

Mình đã trả lời chủ topic bên kia rồi nhé.
MS với mysql cũng ko khác nhau lắm thay cái TOP bằng cái LIMIT là được mà
sonnb viết 13:31 ngày 10/10/2018
Được gửi bởi ToiYeuVietNam99
MS với mysql cũng ko khác nhau lắm thay cái TOP bằng cái LIMIT là được mà
Thay nhưng vị trí lại khác nhau. Đấy là mình góp ý cho bạn kia thôi, chẳng có ý gì cả. Giúp phải giúp chạy được chứ.
mrdinh viết 13:38 ngày 10/10/2018
Thanks các Pro,
Cái này thì chắc chắn sẽ đúng với yêu cầu của mình rồi.
Thế mới biết, còn nhiều cái mình phải học lắm.
Cảm ơn mọi người!
Bài liên quan
0