Hangi Arama / Etiket sistemi daha iyi?

1 Cevap php

Kullanıcıları ve kullanıcı tarafından oluşturulan yazılar, galerileri ve video vardır bir web sitesi üzerinde çalışıyorum. Ben bir etiketleme sistemi ve hepsi için bir arama yapmak için çalışıyorum.

İlk başta ben tbl_articles, tbl_galleries ve tbl_videos ben bir başlık, açıklama ve etiketleri alana sahip olacağını düşünüyordum. Sonra her biri için aşağıdaki gibi bir sorguyu çalıştırın:

select * from tbl_articles where match(title, description, tags)
  against ('$search' in boolean mode) ORDER BY match(title, description, tags)
  against ('$search' in boolean mode) DESC, views desc LIMIT 0, 3

Tbl_galleries ve tbl_videos için aynı sorgu. Kullanıcıları sadece kullanıcı adı karşılaştırın. Sonra 'more' düğmesine (facebook tarzı) ile sonuçları sayfasında her üç gösterilecek.

Bir makale, galeri veya video izlerken de benzer içeriğe bağlantılar yüzden sadece '1, 3 'ayarlanmış LIMIT ile aynı sorguyu kullanarak düşünüyordum orada olacak - kendini gösteren önlemek için.

Q1 - Bu nasıl bir sistemdir?

Ben bulana kadar, sistem ile mutlu oldu this

Onlar sahip oldukları

  • a 'tags' table which contains two columns a primary id and a uniquely indexed tag_name.
  • a 'type' table for which they have another primary id and a uniquely indexed 'type' (category) (I thought I could use it for user/video/article/gallery)
  • a 'search' table that contains the url of the article with a foreign id from 'tags' and 'type'. (I thought instead of a full url I could just store the related foreign id so that I can generate the url e.g article.php?id=....)

Q2 - nasıl başlık veya açıklama aramak olsa da bu sistem ... çok daha verimli görünüyor?

Q3 - diğer kötü bir şey .. her bir sayfa için ben etiketleri katılmak olurdu böylece o çok daha verimli olmayabilir.

Q4 - Benim sistem sadece ben 'gibi' sorgu ile daha iyi olurdu, çok Boole arar?

Q5 - Bu benim sistemde 'tren istasyonu' için bir arama içinde 'gibi bir etiketi eşleşmiyor olsa ben 4 etiketleri benim kullanıcıları sınırlayabilir, ama ben tek kelime (stackoverflow tarzı) teşvik ... Ben fark tren istasyonu 'nasıl bu çevrede alabilirim?

O kadar çok soru ... bu kadar uzun üzgünüm. Teşekkür ederim.

1 Cevap

Q1 - Bu makale, etiketler ve makaleler ve etiketleri ile bir bağlantı tablo için üç ayrı tablo ile daha iyi. Ayrıca makale ve bir articles_tags tablo için iki tablo ile bunu yapabilirdi. Articles_tags tablo bileşik anahtar olarak bir articleID alan ve etiketini kendisi içerecektir. Iki veya üç tablo kolay haberler etiketleri belirli bir makaleye atanan belirli bir etiketi olan ve hangi bulmak için yapar.

Q2 - başlık ve açıklama aramalar yüzdeleri veya regex veya tam metin arama ile "gibi" kullanılarak yapılabilir.

Q3 - başkalarıyla etiketleri tabloları katılma konusunda endişelenmeyin. , Knuth tefsir ilk inşa etmek, ardından darboğazları bulmak. MySQL ne yaptığını çok iyi. Birlikte tekrar tekrar ve tekrar ve tekrar bu tabloları birleştirme zarar vermez.

S4 - Bu sonuçların çıkmak istediğini bağlıdır. genellikle gerçek verileri istiyorum ve o zaman sadece satır sayısı için test edebilirsiniz doğru veya yanlış olup olmadığını söylemek için döndü.

Q5 - yine, sorgu veritabanına kapalı teslim önce PHP tarafında sözdizimi ve belki bazı yaratıcı regex "gibi" kullanmak zorunda.

iyi şanslar!