En DB (MySQL) yapı: sevdigi etiketler bulunmalıdır Makaleler

2 Cevap php

I've built a news site: - The articles are shown on the front page ordered by date. The newest one first. - The news are in the table "news" with the fields "id", "title", "text" and some other ones. - All articles are tagged with 1-5 relevant tags. - The tags are in the table "tags" with the fields "id", "tag", "article" and some other ones. - The field "article" of "tags" fits to the field "id" of "news".

Şimdi kullanıcının kendi "tercih etiketleri listesine" etiketler eklemek için fırsat vermek istiyorum. Sonra kullanıcı sadece tercih etiketlerden birini içeren haberler, makaleler görmelisiniz.

Kullanıcı Bob "obama", "nba", "new jersey" ve "köpekler" etiketleri tercih etti varsayarsak. O sadece bu dört etiketleri en az birini içeren makaleler görmelisiniz.

Bunu nasıl elde bir PHP / MySQL komut dosyası kod olabilir? Benim veritabanı yapısı, bu amaç için yeterli değildir bu olduğunu düşünüyorum? Ben böyle DB sorguları yapmak zorunda kalacak:

"Haber WHERE id IN (etiketleri GELEN SELECT makale WHERE ('obama', 'nba', 'new jersey', 'köpek') IN tag)" SELECT *

Bu sorgu, öyle değil mi, uzun süre koşmak istiyorsunuz? Benimkinden daha uygun bir veritabanı yapısı olmalıdır. Bu sorun için bir fikriniz var mı? Hangi DB yapısı ihtiyacım var ve ben sonra ne sorgu kullanmanız gerekir?

Bana yardımcı olur umarım. Şimdiden teşekkürler!

2 Cevap

Aşağıdaki kesin / ayrıntılı hiçbir şekilde, ama sen doğru yönde gidiyor almalısınız.

Tables:

news
=====
id
title
text

tag
===
id
tag

tag_map
=======
tag_id
news_id

favorite_tags
=============
user_id
tag_id

Query

SELECT * 
FROM favorite_tags
JOIN tag_map ON favorite_tags.tag_id = tag_map.tag_id
JOIN news ON tag_map.news_id = news.id
WHERE favorite_tags.user_id = $userid

Sorgunun performansı (sizin sub-select yaklaşım, ya da Frank Çiftçi olsun daha şık katılmak tabanlı bir) başta endeksleri bağlıdır. Sadece MySQL sadece bir masa başı endeksi, ve (optimize etmek istediğiniz sorguya bağlı olarak) endekslerinin uygun bir dizi kullandığını unutmayın her zaman oldukça açık hale gelir ...