Điều bạn mô tả là linked list. Vấn đề là chúng thường khó truy xuất chỉ bằng SQL. Giải pháp của tôi là sử dụng PHP để thực hiện sắp xếp khi truy xuất.
bảng của bạn sẽ giống như thế này:
CREATE TABLE page {
page_id INT,
first_comment_id INT
}
CREATE TABLE comment {
comment_id INT PRIMARY KEY AUTOINCREMENT,
page_id INT,
next_comment_id INT
}
truy vấn của bạn rất đơn giản:
SELECT comment_id, next_comment_id
FROM comment
WHERE page_id = $page_id
ORDER BY comment_id DESC
Bước quan trọng là để xoa bóp các kết quả từ mysql_fetch_assoc() vào một mảng được lập chỉ mục theo để comment_id:
$result = mysql_query($sql);
$indexed_list = array();
while ($row = mysql_fetch_assoc($result))
{
$indexed_list[$row['comment_id']] = $row;
}
Kết quả trong một mảng tương tự như sau:
$indexed_list = array(
1 => array("comment_id"=>1, "next_comment_id"=>2),
2 => array("comment_id"=>2, "next_comment_id"=>5),
3 => array("comment_id"=>3, "next_comment_id"=>4),
4 => array("comment_id"=>4, "next_comment_id"=>0),
5 => array("comment_id"=>5, "next_comment_id"=>3));
Chức năng PHP để sắp xếp chúng vào nề nếp thể hiển thị rất đơn giản:
function llsort($indexed_list, $first_comment_id)
{
$sorted_list = array();
$node = $indexed_list[$first_comment_id];
array_push($sorted_list, $node);
do
{
$node = $indexed_list[$node['next_comment_id']];
array_push($sorted_list, $node);
} while ($node['next_comment_id'] != 0
AND isset($indexed_list[$node['next_comment_id']]));
return $sorted_list;
}
Bạn nhận được first_comment_id từ bảng trang. Tất nhiên, bạn vẫn phải thực hiện các chức năng để chèn một nút và xóa một nút, nhưng những người còn lại là bài tập cho người đọc. Đừng quên sử dụng các giao dịch để chèn và xóa các nút.
Thông tin thêm về danh sách liên kết trong MySQL:
Hãy nhớ ** chấp nhận ** câu trả lời nếu nó giúp bạn giải quyết vấn đề của mình. –