2010-05-28 20 views
6

मैं reddit जैसे कुछ बनाना चाहता हूं जहां उनके पास टिप्पणियां हैं, फिर टिप्पणी का जवाब दें, फिर उत्तर का जवाब दें।मैं टिप्पणियों का जवाब कैसे दूं? (PHP)

कर डेटाबेस संरचना किस प्रकार वे इतनी का उपयोग करें:

1. they keep track of all the comments to a posting 
2. a reply to a comment 
3. a reply to a reply 

सभी मैं सही कर रहे हैं सिर्फ एक पोस्टिंग और जैसे कि यह करने के लिए संबंधित टिप्पणियों का एक गुच्छा है ..

POSTING TABLE 
posting_id | title | author 

COMMENTS TABLE 
comment_id | posting_id | comment 

REPLIES TABLE 
???? 

कैसे कर मैं टिप्पणियों को टिप्पणियों से जोड़ता हूं? इंडेंट स्पेस के जवाब देने के लिए वे किस प्रकार का सीएसएस उपयोग करते हैं?

संपादित करें: उत्तर के लिए धन्यवाद! अब मेरा एकमात्र प्रश्न मैं जवाब कैसे इंडेंट करूं? जैसे ..

you like food 
    yes I love italian 
     Yes i do like it too 
    chinese is best 

उत्तर

6

आप अपनी टिप्पणी तालिका parent_comment_id जहां आप इसे टिप्पणी (या जबाब) उपयोगकर्ता का जवाब दे रहे है आईडी के साथ पॉप्युलेट निर्दिष्ट करने के लिए एक और स्तंभ जोड़ सकते हैं। इस मामले में जहां टिप्पणी पोस्ट का सीधा जवाब है (टिप्पणी का उत्तर नहीं) यह कॉलम शून्य होगा।

+3

बिल्कुल: टिप्पणियां टिप्पणियां हैं, चाहे वे अन्य टिप्पणियों के उत्तर हों या नहीं। –

+0

क्षमा करें, मैं बहुत धीमी हूँ। मैं समझ गया! धन्यवाद। अब मेरा सवाल यह है कि मैं जवाब कैसे इंडेंट करता हूं? क्या मुझे कुछ प्रकार के संबंध जानने की ज़रूरत है? जैसे कि यह उत्तर पहला है, यह उत्तर दूसरा इंडेंट x2 है, यह उत्तर तीसरा है, इसलिए identx3 – jpjp

+0

@jpjp: मैं इसे एप्लिकेशन स्तर पर करूँगा। जब आप टिप्पणियों का पेड़ बनाते हैं, तो आप उन्हें इंडेंट करने के लिए बहुत कुछ जानते हैं। माता-पिता के रूप में बस एक और। –

0

अपनी टिप्पणी तालिका में एक और फ़ील्ड जोड़ें जो "answer_to" या कुछ ऐसे हैं, और उस टिप्पणी की आईडी को संग्रहीत करें जो यह उत्तर में है।

0

आप टिप्पणी तालिका सामान्य इसलिए की तरह कर सकता है:

COMMENTS TABLE 
comment_id | posting_type | posting_id | comment 

जहां posting_type जैसे एक स्ट्रिंग discriminator के कुछ प्रकार, 'पोस्ट' या 'टिप्पणी', या अधिक दक्षता (1 = पोस्ट के लिए एक पूर्णांक है , 2 = टिप्पणी, आदि)।

संपादित करें: स्वीकार्य रूप से यह अधिक जटिल है, लेकिन इसका मतलब है कि आप किसी भी टिप्पणी पर टिप्पणी के लिए एक ही टिप्पणी तालिका का उपयोग कर सकते हैं, केवल पोस्ट और अन्य टिप्पणियों पर नहीं।

+0

आप "मूल" टिप्पणी से संबंध खो रहे हैं। –

+0

नहीं, क्योंकि तब posting_type टिप्पणी है और posting_id मूल टिप्पणी आईडी है। – oedo

+0

यह एक छद्म एफके सम्मेलन तोड़ता है। इसके अलावा इस मामले में आप तालिका में एफके नहीं जोड़ सकते क्योंकि posting_id अब भी खुद को संदर्भित करेगा। –

0

आपको उत्तर तालिका की आवश्यकता नहीं है। जैसा कि अन्य पहले से ही सही ढंग से इंगित कर चुके हैं, आरडीबीएमएस के साथ जाने का रास्ता रिकर्सन है। रिकर्सन से निपटने से बचने के लिए आप हमेशा एक नोस्कल शैली डीबीएमएस का उपयोग करने पर विचार कर सकते हैं।

1

मैं एक क्रॉस संदर्भ तालिका बनाकर ऐसा करूँगा।

उदाहरण:

तालिका: पोस्ट

Columns: pstkey | userid | postMessage | etc...

pstkey पोस्ट शरीर के लिए महत्वपूर्ण है। उपयोगकर्ता आईडी वह व्यक्ति है जिसने पोस्ट बनाया है। पोस्ट मैसेज वास्तविक पोस्ट एंट्री है।

तालिका: टिप्पणियाँ

Columns: comkey | pstkey | userid | commentMessage | etc...

comkey की गई टिप्पणी के लिए महत्वपूर्ण है। pstkey का उपयोग कर पोस्ट के संदर्भ में। उपयोगकर्ता आईडी वह व्यक्ति है जिसने टिप्पणी की है। और फिर टिप्पणी संदेश वास्तविक टिप्पणी का पाठ निकाय है।

तालिका: xref_postComm

Columns: xrefkey | pstkey | comkey | comkey2 |

अब मज़े की बात । सभी पोस्ट पोस्ट टेबल में जाते हैं। सभी टिप्पणियां टिप्पणी तालिका में जाओ। संबंध सभी क्रॉस संदर्भ तालिका में परिभाषित हैं।

मैं अपने सभी प्रोग्रामिंग इस तरह से करता हूं। मुझे दुनिया के बेस्ट डेटाबेस इंजीनियरों में से एक के साथ काम करने का विशेषाधिकार मिला, जो सेवानिवृत्त हुए और उन्होंने मुझे कुछ चाल सिखाई।

क्रॉस संदर्भ तालिका उपयोग कैसे करें:

xrefkey | pstkey | comkey | comkey2 
All that you look for is the population of a given field. 

xref (Auto Incremented) 
pstkey (Contains the pstkey for the post) 
comkey (Contains the comkey for the comment post) 
comkey2 (Contains the comkey for the comment post) 
     (but only populate comkey2 if comkey already has a value) 
and of course you populate comkey2 with the key of the comment. 

SEE, no reason for a 3rd tabel! 

With this method you can add as many relationships as you want. 
Now or in the future! 

comkey2 एक उत्तर के लिए आपके उत्तर है। जहां इस एकल पंक्ति में .... पोस्ट की कुंजी, टिप्पणी की कुंजी, और उत्तर टिप्पणी के उत्तर की कुंजी है। सभी xref की आबादी द्वारा किया गया।

 
EXAMPLE: 
PAGES.... Page table 

POSTS 
pstkey | pageid | user| Post 
------------------------------------- 
| 1 | 1 | 45 | Went to the store the....| 
| 2 | 2 | 18 | Saw an apple on tv..... 

COMMENTS 
comkey | pstkey | user | Comment 
----------------------------------------------- 
| 1 | 1 | 9 | Wanted to say thanks... 
| 2 | 1 | 7 | Cool I like tha..... 
| 3 | 2 | 3 | Great seeing ya.... 
| 4 | 2 | 6 | Had a great.... 
| 5 | 2 | 2 | Don't sweat it man... 

xref_PostCom 
xrefkey | pageid | pstkey | comkey | comkey2 | 
---------------------------------------------- 
| 1 | 1 | 1 | NULL | NULL | Post1 on Page1 
| 2 | 1 | 1 | 1 | NULL | Comment1 under Post1 
| 3 | 1 | 1 | 2 | NULL | Comment2 under Post1 
| 4 | 2 | 2 | NULL | NULL | Post2 on Page2 
| 5 | 2 | 2 | 3 | NULL | Comment3 under Post2 on Page2 
| 6 | 2 | 2 | 4 | NULL | Comment4 under Post2 on Page2 (a second Comment) 
| 7 | 2 | 2 | 4 | 5 | Explained below.... 
Comment key 5 is matched with comment key 4....under post2 on Page 2 

आप में शामिल होने के बारे में कुछ पता है, तो में शामिल होने, सही में शामिल होने, आंतरिक/बाहरी बनाने में शामिल हों चुनें के इन संबंधों का उपयोग कर डेटा सरणियों प्राप्त करने के लिए, अपनी नौकरी एक पूरी बहुत आसान हो जाता है छोड़ दिया है।

मेरा मानना ​​है कि अभियंता कॉल को परिभाषित रिश्तों के मूल रूप से "डेटा मैप" कहते हैं। यह चाल अब इन रिश्तों का उपयोग करके आप कैसे पहुंच सकते हैं। यह पहली बार कड़ी मेहनत करता है, लेकिन मुझे पता है कि मैं इसे क्या जानता हूं, मैं इसे किसी अन्य तरीके से करने से इनकार करता हूं।

अंत में क्या होता है आप अंत में 1 स्क्रिप्ट लिखते हैं जो कहता है, ठीक है, सब कुछ करो, सब कुछ और वापस आओ। आप 1 फ़ंक्शन कॉल के साथ समाप्त होंगे जो पृष्ठ 1 के लिए पूछता है। यह पृष्ठ 1, पोस्ट 1, टिप्पणी 1 3 और 1 सरणी में उत्तर के उत्तरों के साथ आता है। उत्पादन और करने के लिए गूंज।

टिप्पणी के लिए अद्यतन मैंने पहली बार यह दिखाया कि यह वही सटीक बात है जो मुझे दिखाया गया था। वास्तव में यह वास्तव में मुझे पागल बना रहा था कि डेटाबेस प्रोग्रामर मुझे इस तरह से ऐसा करने के लिए मजबूर कर रहा था। लेकिन अब मुझे यह मिल गया। फायदे बहुत सारे हैं।

लाभ 1) 1 क्वेरी को इसे 1 शॉट में खींचने के लिए लिखा जा सकता है।

2) कई प्रश्नों में उत्तर एक संरचना में सरणी को पॉप्युलेट कर सकते हैं कि पृष्ठ को प्रिंट करते समय लूप में एक लूप पृष्ठ प्रदर्शित कर सकता है।

3) इसका उपयोग करने वाले आपके सॉफ़्टवेयर को अपग्रेड करना किसी भी संभावित डिज़ाइन परिवर्तन का समर्थन कर सकता है जिसे आप कभी भी सोच सकते हैं। निर्दोष विस्तारशीलता।

वह व्यक्ति जिसने मुझे यह सिखाया वह किराए पर बंदूक थी जिसने सीर और जेसीपीनी डेटाबेस को फिर से डिजाइन किया था। वापस जब उनके पास डुप्लिकेट रिकॉर्ड मुद्दों के कारण 9 घरें एक ही घर जा रही हैं।

क्रॉस संदर्भ तालिका डिजाइन में कई मुद्दों को रोकती है।

इस सिद्धांत का दिल है, एक कॉलम में केवल डेटा नहीं हो सकता है बल्कि एक ही समय में एक वास्तविक या गलत कथन के रूप में कार्य करता है। यह स्वयं में अंतरिक्ष बचाता है। जब आप एक खोज सकते हैं तो 20 टेबल क्यों खोजते हैं? 1 अनुक्रमित क्रॉस संदर्भ तालिका आपको अन्य 20 तालिकाओं, सामग्री, जो आपको चाहिए, जो आपको चाहिए, के बारे में जानने के लिए आपको जो कुछ भी चाहिए, उसे बता सकता है, और आपको अन्य तालिका को भी खोलने की आवश्यकता है।

संक्षेप में: 1 क्रॉस लेकिन INT (2/11) कुछ भी नहीं युक्त संदर्भ है कि आप सब कुछ बात करने से पहले आपको कभी एक और तालिका खोलने जानने की जरूरत बताता है, न केवल निर्दोष विस्तार लेकिन प्रकाश की गति के परिणाम शामिल हैं। डुप्लिकेट रिकॉर्ड की कम संभावना का उल्लेख नहीं है। आपके और मेरे लिए डुप्लिकेट रिकॉर्ड एक मुद्दा नहीं हो सकता है। लेकिन सीअर्स को $ 11 बिलियन पर 4 अरब रिकॉर्ड के साथ, गलतियों को जोड़ दिया गया।

+0

क्या आप कह सकते हैं इसका लाभ क्या है? मैं देखता हूं कि मुझे और अधिक जोड़ना है ... –

2

उत्तरों के अंदर जवाब दिखाने के लिए, आपको उप उत्तरों को उत्पन्न करने के लिए एक रिकर्सिव कॉल करना होगा।

कुछ

तरह
function get_comments($comment_id) { 
    print '<div class="comment_body">'; 

    // print comment body or something? 

    if (comment_has_reply($comment_id)) { 
     foreach(comment_comments($comment_id) as $comment) { 
      get_comments($comment->id); 
     } 
    } 

    print '</div>'; 
} 
मांगपत्र टिप्पणियां हालांकि, उपयोग सीएसएस करने के लिए

<style type="text/css"> 
.comment_body { 
    margin-left:10px; 
} 
</style> 

इस तरह उप उत्तरों को माता-पिता से अधिक इंडेंट किया जाता है, और उनके subs को और भी इंडेंट किया जाता है, और इसी तरह।

संबंधित मुद्दे