SORU
27 Kasım 2009, Cuma


Nasıl etiket sistemi uygulamak

En iyi yolu etiket sistemi uygulamak için ne KADAR kullanılır gibi merak ediyordum. Bu düşünüyordum ama iyi kullanmalarına olanak ile gelmiyor.

3 tablo temel bir çözüm düşünüyorum: tags tablo, articles tablolar tag_to_articles Bir tablo. bir sahip

Bu sorun için en iyi çözüm, ya da alternatif var mı? Tablo bu arama için zaman ve çok büyük olacaktı bu yöntemi kullanarak çok verimli olmadığını düşünüyorum. Öte yandan sorgu hızlı yürüten bir o kadar da önemli değil.

CEVAP
27 Kasım 2009, Cuma


İlginç bir blog yazısı bulacağına inanıyorum: Tags: Database schemas

Sorun: bir etiket bulunduğu bir veritabanı şema istiyorum istediğiniz kadar etiket ile yer imi (ya da bir blog yazısı ya da her neyse). Daha sonra, bir için yer imleri sınırlamak için sorgular çalıştırmak istediğiniz etiketler Birliği veya kavşak. De dışarıda bırakmak istiyorsanız (ki: eksi) arama sonucunda bazı etiketler.

“MySQLicious” çözüm

Bu çözüm, şema sadece bir tablo var, normal dışı. Bu tür “” MySQLicious ithalat del çünkü.MySQLicious çözüm denir-- .bize bu yapı ile bir tabloya veri.

enter image description hereenter image description here

Kesişim (VE) Sorguda“”: . arama Java eklentisi semweb

SELECT *
FROM `delicious`
WHERE tags LIKE "%search%"
AND tags LIKE "%webservice%"
AND tags LIKE "%semweb%"

Birliği (VEYA) Sorguda“”: . arama|Java eklentisi|semweb

SELECT *
FROM `delicious`
WHERE tags LIKE "%search%"
OR tags LIKE "%webservice%"
OR tags LIKE "%semweb%"

Eksi Sorgu “arama Java eklentisi-semweb”

SELECT *
FROM `delicious`
WHERE tags LIKE "%search%"
AND tags LIKE "%webservice%"
AND tags NOT LIKE "%semweb%"

“Bir yandan da” çözüm

Scuttle iki tablodaki verileri düzenler. Bu tablo “” “”-tablo ve yabancı anahtar var “”-tablo. yer imi etiketi olduğu scCategories

enter image description here

Kesişim (VE) Sorguda“”: . imi Java eklentisi semweb

SELECT b.*
FROM scBookmarks b, scCategories c
WHERE c.bId = b.bId
AND (c.category IN ('bookmark', 'webservice', 'semweb'))
GROUP BY b.bId
HAVING COUNT( b.bId )=3

Etiketi olduğu ilk yer imi etiketi tüm kombinasyonları aranır,“”, “” veya “” (c.semweb Java eklentisi imi('', '', '') semweb), o zaman sadece üç etiketi için aranan var yer imleri hesaba (SAYIM OLMASI(b.Java eklentisi bookmark kategori teklif)=3).

Birliği (VEYA) Sorguda“”: . imi|Java eklentisi|semweb Sadece yan bırakın ve birlik vardır:

SELECT b.*
FROM scBookmarks b, scCategories c
WHERE c.bId = b.bId
AND (c.category IN ('bookmark', 'webservice', 'semweb'))
GROUP BY b.bId

Eksi (Dışlama) “Yer imi Java eklentisi-semweb”, yani: imi VE semweb. Java eklentisi sorgu için

SELECT b. *
FROM scBookmarks b, scCategories c
WHERE b.bId = c.bId
AND (c.category IN ('bookmark', 'webservice'))
AND b.bId NOT
IN (SELECT b.bId FROM scBookmarks b, scCategories c WHERE b.bId = c.bId AND c.category = 'semweb')
GROUP BY b.bId
HAVING COUNT( b.bId ) =2

İçin Sorgulamak ZORUNDA SAYIMI neden dışarıda bırakarak “imi Java eklentisi-semweb”.|


“Toxi” çözüm

Toxi üç tablolu bir yapı ile geldi. Tabloyu “” imleri ve etiketleri-n m ilgili. tagmap) Her etiket farklı yer imleri ile birlikte ve tam tersi kullanılabilir. Bu da wordpress tarafından kullanılan DB-şema. Sorguların “çözüm. bir yandan da aynıdır oldukça

enter image description here

Kesişim (VE) Sorguda“”. imi Java eklentisi semweb

SELECT b.*
FROM tagmap bt, bookmark b, tag t
WHERE bt.tag_id = t.tag_id
AND (t.name IN ('bookmark', 'webservice', 'semweb'))
AND b.id = bt.bookmark_id
GROUP BY b.id
HAVING COUNT( b.id )=3

Birliği (VEYA) Sorguda“”. imi|Java eklentisi|semweb

SELECT b.*
FROM tagmap bt, bookmark b, tag t
WHERE bt.tag_id = t.tag_id
AND (t.name IN ('bookmark', 'webservice', 'semweb'))
AND b.id = bt.bookmark_id
GROUP BY b.id

Eksi (Dışlama) “Yer imi Java eklentisi-semweb”, yani: imi VE semweb. Java eklentisi sorgu için

SELECT b. *
FROM bookmark b, tagmap bt, tag t
WHERE b.id = bt.bookmark_id
AND bt.tag_id = t.tag_id
AND (t.name IN ('Programming', 'Algorithms'))
AND b.id NOT IN (SELECT b.id FROM bookmark b, tagmap bt, tag t WHERE b.id = bt.bookmark_id AND bt.tag_id = t.tag_id AND t.name = 'Python')
GROUP BY b.id
HAVING COUNT( b.id ) =2

İçin Sorgulamak ZORUNDA SAYIMI neden dışarıda bırakarak “imi Java eklentisi-semweb”.|

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • 10 Daughters, 2 Sons

    10 Daughters

    10 Mart 2009
  • Joseph Herscher

    Joseph Hersc

    14 Mart 2007
  • TecnoTutosPC

    TecnoTutosPC

    19 Kasım 2012