09/10/2018, 23:55

Lưu những bài post và reply như thế nào?

Em thấy trong hầu hết diễn đàn khi một người post bài lên và có những người khác reply.Thường thì người ta lưu nó như thế nào? Có phải phần đó lưu chung với phần thông tin về thành viên khi đăng ký không?Theo em thì tạo ra 2 bảng: Một lưu thông tin thành viên, một lưu những bài post. Trong bảng này có 3 cột:subject,comment,và tên user đã post.Tên user này là khóa ngoại tham chiếu đến cột tên user trong bảng lưu thông tin thành viên.Nhưng khi đó nhưng user reply được lưu ở đâu để khi truy cấp đến subject đó thì hiên lên toàn bộ những người đã reply trong đó???
Các cao thủ ơi! Ai biết chỉ em với nha!!!
temp2 viết 01:58 ngày 10/10/2018
dễ ẹc, down về 1 bản nào đó rồi ngâm cứu,

các forum lớn thường lưu các bài post trong 1 bảng, mỗi bài post là 1 record, trong đó có field qui định bài post nào sẽ là bài đầu tiên của chủ đề
TheHeTre viết 02:06 ngày 10/10/2018
Theo cách làm của các diễn đàn mã nguồn mở thông thường, lấy ví dụ là PHPBB3, họ tạo 2 bảng để việc này:

Bảng lưu các bài viết: posts
gồm:
post_id
topic_id
user_id //Đây là id của thành viên trong bảng users
post_time
post_subject
post_content

... và những cái lằng nhằng khác (ở đây tối giản cho dễ hiểu)
Bảng lưu các chủ đề: topics
gồm
topic_id
topic_title
...
- Khi gửi một chủ đề, tạo topic trước rồi lấy id vừa được tạo này để thêm vào bảng posts. Bảng posts được thêm dữ liệu theo cách thông thường, lấy từ form...

- Khi đọc một chủ đề, truy vấn các posts có topic_id là id của chủ đề hiện thời, rồi xắp xếp theo post_time. Ví dụ:
Code:
SELECT p.*, u.username
FROM posts p
INNER JOIN users u
ON p.user_id = u.user_id
WHERE p.topic_id = $topic_id
ORDER BY p.post_time DESC
Như thế là khá đầy đủ. Các vấn đề khác có thể phát triển thêm theo nhu cầu.
tuanan87 viết 01:57 ngày 10/10/2018
Quote Được gửi bởi temp2 View Post
dễ ẹc, down về 1 bản nào đó rồi ngâm cứu,
Vậy bạn chỉ mình cách lấy những bảng đó đi.Để về ngâm cứu cho tiện.Thanks!!
TheHeTre viết 02:04 ngày 10/10/2018
Bài viết ở trên không có tác dụng gì sao? Nếu vậy có thể dùng tạm đơn thuốc này về ngâm rượu.
extjs viết 01:58 ngày 10/10/2018
Cái hình thấy gớm
j/k
tuanan87 viết 02:04 ngày 10/10/2018
Quote Được gửi bởi TheHeTre View Post
Bài viết ở trên không có tác dụng gì sao? Nếu vậy có thể dùng tạm đơn thuốc này về ngâm rượu.
Sorry!sorry!!!Tại em định sẳn nhờ mấy anh chỉ cách tìm link để sao này có tham khảo về vấn đề khác có thể tìm được dể dàng vậy mà. Với lại sẳn coi thử có j khác có thể bổ sung không đó mà! Cám ớn mấy anh nhiều nha!!!
tuanan87 viết 02:04 ngày 10/10/2018
Quote Được gửi bởi TheHeTre View Post
Theo cách làm của các diễn đàn mã nguồn mở thông thường, lấy ví dụ là PHPBB3, họ tạo 2 bảng để việc này:

Bảng lưu các bài viết: posts
gồm:


Bảng lưu các chủ đề: topics
gồm

- Khi gửi một chủ đề, tạo topic trước rồi lấy id vừa được tạo này để thêm vào bảng posts. Bảng posts được thêm dữ liệu theo cách thông thường, lấy từ form...

- Khi đọc một chủ đề, truy vấn các posts có topic_id là id của chủ đề hiện thời, rồi xắp xếp theo post_time. Ví dụ:
Code:
SELECT p.*, u.username
FROM posts p
INNER JOIN users u
ON p.user_id = u.user_id
WHERE p.topic_id = $topic_id
ORDER BY p.post_time DESC
Như thế là khá đầy đủ. Các vấn đề khác có thể phát triển thêm theo nhu cầu.
ah anh cho hỏi: Em có thể để topic_id này này kiểu int và để auto_increment được không? Nếu được thì sao mỗi lần post reply topic_id này lại tăng lên nên không hợp với topic ban đâu rùi! Mà nếu không để chế độ auto_increment thì làm sao có được topic_id này ?
sacroyant viết 01:57 ngày 10/10/2018
Quote Được gửi bởi tuanan87 View Post
ah anh cho hỏi: Em có thể để topic_id này này kiểu int và để auto_increment được không? Nếu được thì sao mỗi lần post reply topic_id này lại tăng lên nên không hợp với topic ban đâu rùi! Mà nếu không để chế độ auto_increment thì làm sao có được topic_id này ?
Trường hợp này bạn nên tạo ra các random id và sử dụng thì sẽ tốt hơn.
TheHeTre viết 02:05 ngày 10/10/2018
Quote Được gửi bởi tuanan87 View Post
ah anh cho hỏi: Em có thể để topic_id này này kiểu int và để auto_increment được không? Nếu được thì sao mỗi lần post reply topic_id này lại tăng lên nên không hợp với topic ban đâu rùi! Mà nếu không để chế độ auto_increment thì làm sao có được topic_id này ?
Trong bảng topics thì để topic_id là int và có thuộc tính auto_increment.

Khi gửi bài trả lời thì lấy giá trị topic_id từ trình duyệt và thêm vào bảng posts. Ví dụ bạn có một link khi gửi bài trả lời như thế này:

http://web.com/post.php?mod=reply&topic_id=3

Thì lấy giá trị:
$topic_id = (int)$_GET['topic_id'];

trong bảng post chỉ có post_id là auto_increment, topic_id là khóa ngoại!
Bài liên quan
0