Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

टैग क्लाउड के लिए MySql टेबल कैसे डिज़ाइन करें?

आम तौर पर, इस तरह के कई-से-अनेक संबंधों के लिए, तीन तालिकाएँ होती हैं:

  • "article " टेबल
    • प्राथमिक कुंजी =आईडी
  • "tag " टेबल
    • प्राथमिक कुंजी =आईडी
    • प्रत्येक टैग का डेटा होता है:
      • नाम, उदाहरण के लिए
  • ए "tags_articles "तालिका, जो एक सम्मिलित तालिका के रूप में कार्य करती है, और इसमें केवल :
    • id_article :विदेशी कुंजी जो किसी लेख की ओर इशारा करती है
    • id_tag :विदेशी कुंजी जो किसी टैग को इंगित करती है


इस तरह, किसी भी टैग के डेटा का दोहराव नहीं होता है:प्रत्येक टैग के लिए, tag में एक और केवल एक लाइन होती है। टेबल।

और, प्रत्येक लेख के लिए, आपके पास कई टैग हो सकते हैं (अर्थात tags_articles में कई पंक्तियाँ टेबल); और, ज़ाहिर है, प्रत्येक टैग के लिए, आपके पास कई लेख हो सकते हैं।

इस विचार के साथ किसी लेख के लिए टैग की सूची प्राप्त करना, एक अतिरिक्त प्रश्न का विषय है, जैसे:

select tag.*
from tag
    inner join tags_articles on tag.id = tags_articles.id_tag
where tags_articles.id_article = 123


तीन "सबसे समान" लेख प्राप्त करने का अर्थ होगा:

  • उन लेखों का चयन करें जिनमें टैग हैं जो पहले लेख में हैं
  • केवल उन्हीं का उपयोग करें जिनमें समान टैग की सबसे महत्वपूर्ण संख्या है

परीक्षण नहीं किया गया है, लेकिन एक विचार कुछ ऐसा हो सकता है जो इस तरह दिखाई देगा:

select article.id, count(*) as nb_identical_tags
from article
    inner join tags_articles on tags_articles.id_article = article.id
    inner join tag on tag.id = tags_articles.id_tag
where tag.name in ('php', 'mysql', 'erlang')
      and article.id <> 123
group by article.id
order by count(*) desc
limit 3

मूल रूप से, आप :

  • आपके प्रारंभिक लेख में मौजूद प्रत्येक टैग के लिए लेख आईडी चुनें
    • चूंकि एक आंतरिक जुड़ाव है, यदि डीबी में एक लेख में 2 टैग हैं जो where से मेल खाते हैं खंड, group by . के बिना खंड, उस लेख के लिए दो पंक्तियाँ होंगी
    • बेशक, आप उस लेख का फिर से चयन नहीं करना चाहते जो आपके पास पहले से था -- जिसका अर्थ है कि उसे बाहर करना होगा।
  • लेकिन, जैसा कि आप group by article.id का उपयोग करते हैं , प्रति लेख केवल एक पंक्ति होगी
    • लेकिन आप count का उपयोग कर पाएंगे , यह पता लगाने के लिए कि प्रत्येक लेख में शुरुआती एक के साथ कितने टैग समान हैं
  • फिर, यह केवल टैग की संख्या के अनुसार क्रमबद्ध करने और केवल तीसरी तीन पंक्तियों को प्राप्त करने की बात है।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL में कॉलम के प्रतिशत की गणना कैसे करें

  2. MySQL में SUM () के साथ अद्यतन करें

  3. मूडल MySQL डेटाबेस के लिए स्वचालित विफलता को कैसे सेटअप करें

  4. यूटीसी के रूप में बने रहने/लोड करने के लिए हाइबरनेट बल टाइमस्टैम्प

  5. आउटफाइल एक्सेस में MYSQL अस्वीकृत - लेकिन मेरे उपयोगकर्ता के पास सभी एक्सेस हैं .. और फ़ोल्डर CHMOD 777 है