MySQL Söz tabloları birleştirme (php)

1 Cevap php

Situation:

Benim veritabanında ben 'artists' adında bir tablo var ve 'tags'.

Her sanatçı bir bağlantı tablosunda 'artisttags' kaydedilmiş etiketleri bir dizi vardır.

Her benzersiz etiketi 'tags' adında bir tablo kaydedilir.

Problem

Ben, bir sanatçının ortak bir (veya daha fazla) etiketleri tüm sanatçılara göstermek istiyorum.

function getSimilarArtists($artist_id)
{
   $sql = "SELECT ...";
   $query = mysql_query($sql);
   while($artist = mysql_fetch_assoc($query))
   {
       $html .= "<li>".$artist['name']."</li>"    
   }
   print($html);
}

Tables

artists

id | name

artisttags

id | artist_id | tag_id    

tags

id | tag_name

Herhangi bir yardıma açığız.

Teşekkürler

1 Cevap

Bu dış gerçekten zarar verecek Mitosz en cevapta katıldı - ve her sanatçı dönecektir - "ortak bir (veya daha fazla) etiketleri" ile değil, sadece o. Kullanım İç yerine Katıldı

SELECT similar.name, count(*) as commontags
FROM artists current, 
  artisttags curtags,
  artisttags simtags,
  artists similar
WHERE current.id=curtags.artist_id
  AND curtags.tag_id=simtags.tag_id
  AND simtags.artist_id=similar.id
ORDER BY count(*) DESC;

Tabii ki, akıllı bir endeksleme sistemi için size etiketleri tablodaki her etiket için puanlama geçerli olabilir (örn. kullanıcı oy veya cardinality dayalı) ve SUM (tag.score) tarafından sonuçları sıralamak.