क्या आप का वर्णन कर रहे हैं एक linked list है। समस्या यह है कि वे केवल एसक्यूएल का उपयोग करके पुनः प्राप्त करना मुश्किल होता है। मेरा समाधान पुनर्प्राप्ति पर सॉर्टिंग करने के लिए PHP का उपयोग करना है।
आपका तालिका कुछ इस तरह दिखेगा:
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
}
आपकी क्वेरी सरल है:
SELECT comment_id, next_comment_id
FROM comment
WHERE page_id = $page_id
ORDER BY comment_id DESC
महत्वपूर्ण कदम एक सरणी है कि अनुसार अनुक्रमणित है में mysql_fetch_assoc() से परिणाम की मालिश करने के लिए है comment_id पर:
$result = mysql_query($sql);
$indexed_list = array();
while ($row = mysql_fetch_assoc($result))
{
$indexed_list[$row['comment_id']] = $row;
}
इस तरह के एक सरणी में परिणाम:
$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));
पीएचपी समारोह उन्हें प्रदर्शन योग्य क्रम में सॉर्ट करने के लिए सरल है:
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;
}
आप पृष्ठ मेज से first_comment_id मिलता है। बेशक, आपको अभी भी नोड डालने और नोड को हटाने के लिए फ़ंक्शंस को कार्यान्वित करना होगा, लेकिन पाठक के लिए अभ्यास के रूप में छोड़े गए हैं। नोड्स डालने और हटाने के लिए लेनदेन का उपयोग करना न भूलें।
अधिक MySQL में जुड़ा हुआ सूचियों के बारे में जानकारी:
अगर ** आपकी समस्या को हल करने में आपकी सहायता करने के लिए ** एक ** स्वीकार करें याद रखें। –