10/10/2018, 09:38

PHP: Lấy mãu tin mới hơn và cũ hơn so với mẫu tin x

Ở trang mẫu tin xem chi tiết, mình muốn lấy các tin cũ hơn và mới hơn so với mẫu tin hiện tại thì làm sao ấy nhỉ, ai biết chỉ với nha.

Ví dụ: mẫu tin đang xem chi tiết là thứ 49(Thứ 49 chứ không phải ID 49 nhé)

mình muốn lấy cũ hơn là từ: 41->48 và mới hơn là từ 50->57.
s.code viết 11:43 ngày 10/10/2018
Ví dụ mẩu tin x có id là 132

Lấy mẩu tin cũ hơn:
Code:
select * from news where id < 132 order by id desc limit 0,10
kết quả:

131
130
129
....


Lấy mẩu tin mới hơn:
Code:
select * from news where id > 132 order by id asc limit 0,10
kết quả:

133
134
135
....
Chú ý: Riêng phần nãy fetch ra nó ngược vì mẩu tin mới nhất phải nằm trên đầu. Khắc phục bằng cách cho vào 1 mảng rồi xuất ngược cái mảng đó.
viết 11:47 ngày 10/10/2018
Chú ý: Riêng phần nãy fetch ra nó ngược vì mẩu tin mới nhất phải nằm trên đầu. Khắc phục bằng cách cho vào 1 mảng rồi xuất ngược cái mảng đó. <-- sao phải phức tạp nhể
trong câu truy vấn để order by DESC là đc mà
s.code viết 11:42 ngày 10/10/2018
Được gửi bởi svchip
Chú ý: Riêng phần nãy fetch ra nó ngược vì mẩu tin mới nhất phải nằm trên đầu. Khắc phục bằng cách cho vào 1 mảng rồi xuất ngược cái mảng đó. <-- sao phải phức tạp nhể
trong câu truy vấn để order by DESC là đc mà
Giả sử thế này ta có 1 loạt mẩu tin có id như sau:

1
2
4
5
6
8
9
10
11
13
15
16
17
18
19

Nhiệm vụ lấy 3 tin cũ hơn tin có id = 10
Code:
select * from news where id < 10 order by id desc limit 0,3
Khi fetch ra ta dc

9
8
7

Phần này ko có gì để bàn.


Nhiệm vụ lấy 3 tin mới hơn tin có id = 10. Chú ý mới hơn nhưng phải sát tin thứ 10 chứ ko phải 3 tin mới nhất.

Code:
select * from news where id > 10 order by id asc limit 0,3
Ta sẽ được:

11
13
15

.... Nhưng ở đây tin 15 là tin mới hơn tin 13 và 11. Vậy tin đó khi hiển thị ra phải được nằm trên 2 tin kia. Vậy thì phải

15
13
11


Tất cả như vậy ta sẽ có:

Các tin mới hơn:
15
13
11

Các tin cũ hơn
9
8
7


@svchip
Nếu như ban thì sẽ là

Code:
select * from news where id > 10 order by id desc limit 0,3
Cho ket qua la

19
18
17

Đây là 3 tin mới nhất. Chứ ko phải 3 tin mới hơn sát tin đang coi.

Hãy làm 1 lần để hiểu rõ hơn.
luuanhquyen viết 11:38 ngày 10/10/2018
vậy thì bạn lấy ID của mẩu tin thứ 49 xong rồi limit 8 mẩu tin trước và 8 sau là được mà. ID là trường số auto increment. Tất nhiên là không được đồng nhất ID và số thứ tự của mẩu tin. Vì 1 mẩu tin bị xóa thì số ID của mẩu tin đó cũng sẽ bị xóa.
lamsononline viết 11:45 ngày 10/10/2018
sao lai xoa mau tin .

Thuc te thi` cac loai du lieu dang nay can co field display -> boolean

neu display= true thi hien thi , false thi ko hien thi

Ly do:

1 nguoi co the reply cho 1 topic nao do, tuc la du lieu reply co dang sau:

id_replier,title,body,time,news_id

trong do news_id la khoa ngoai, tham chieu den news_id trong table news

Neu ban xoa dong tin cua table news thi dong loat phai xoa cac dong reply doi voi topic news_id. Trong thuc te khong co ai lam nhu vay.

VD: Tai forum nay` neu ban bi ban nick thi` nick ban bi gach di, nhung cac topic ban tao ra van ko bi xoa, vi da co nguoi tra loi, lam` sao xoa du lieu o bang cha ma ko kiem tra du lieu o bang con co tham chieu toi.
jiSh@n viết 11:44 ngày 10/10/2018
Được gửi bởi lamsononline
sao lai xoa mau tin .

Thuc te thi` cac loai du lieu dang nay can co field display -> boolean

neu display= true thi hien thi , false thi ko hien thi

Ly do:

1 nguoi co the reply cho 1 topic nao do, tuc la du lieu reply co dang sau:

id_replier,title,body,time,news_id

trong do news_id la khoa ngoai, tham chieu den news_id trong table news

Neu ban xoa dong tin cua table news thi dong loat phai xoa cac dong reply doi voi topic news_id. Trong thuc te khong co ai lam nhu vay.

VD: Tai forum nay` neu ban bi ban nick thi` nick ban bi gach di, nhung cac topic ban tao ra van ko bi xoa, vi da co nguoi tra loi, lam` sao xoa du lieu o bang cha ma ko kiem tra du lieu o bang con co tham chieu toi.
Data bị đánh dấu xóa hay bị xóa thực sự là tùy thuộc vào cách sử dụng data của phần mềm. Với dạng forum, việc 1 user bị ban ko đồng nghĩa với user bị xóa. Trong AdminCP bao giờ cũng có chức năng xóa user đi kèm với option xóa toàn bộ bài viết của user đó hoặc chuyển thành của 1 member nào đó/guest.
vvthong viết 11:43 ngày 10/10/2018
Bạn thử câu lệnh này xem sao?

select * from news where id between 11 and 13 order by id desc

Lúc này dữ liệu đưa ra là
13
12
11
Bạn thử câu lệnh này xem sao?

select * from news where id between 7 and 9 order by id desc

Dữ liệu đưa ra tương tự sẽ là
9
8
7
vntux viết 11:53 ngày 10/10/2018
Được gửi bởi vvthong
Bạn thử câu lệnh này xem sao?

select * from news where id between 11 and 13 order by id desc

Lúc này dữ liệu đưa ra là
13
12
11
Bạn thử câu lệnh này xem sao?

select * from news where id between 7 and 9 order by id desc

Dữ liệu đưa ra tương tự sẽ là
9
8
7
Cách này được nếu như ID của news là liên tục, còn nếu bị xóa 1 ID trong khoảng đó thì sẽ không lấy đựợc. Dù sao cũng thanhs

[=========> Bổ sung bài viết <=========]

Và cách của bác S-Gallery thì sẽ lấy ra mẫu tin mới nhất của Table, huhu
ngoc_viet08 viết 11:47 ngày 10/10/2018
Ví dụ mẩu tin x có id là 132

Lấy mẩu tin cũ hơn:
Code:

select * from news where id < 132 order by id desc limit 0,10

kết quả:

131
130
129
....


Lấy mẩu tin mới hơn:
Code:

select * from news where id > 132 order by id asc limit 0,10

kết quả:

133
134
135
....
Chú ý: Riêng phần nãy fetch ra nó ngược vì mẩu tin mới nhất phải nằm trên đầu. Khắc phục bằng cách cho vào 1 mảng rồi xuất ngược cái mảng đó.
XD làm đến đây rồi . làm sao để sắp xếp các mẫu tin đã lấy ra về đúng thứ tự theo id trong trường hợp lấy số tin cũ hơn ? theo như ví dụ trên là :

Lấy mẩu tin cũ hơn:
kết quả:

129
130
131
....
Bài liên quan
0