Böyle bir şema varsayarsak:
- Mesaj (id, author_id, POST_DATE, post_text);
- Etiketi (id, TAG_NAME);
- Mesaj Etiket (id, post_id, tag_id).
Mesaj Etiketi tablo (bir post birden Etiketler olabilir ve bir Tag çoklu mesajına kullanılabilir çünkü) Etiketi Post çok-çok ilişki için bir join table adlandırılan şeydir.
Kullanıcı bir giriş alanına virgülle ayırarak etiketlerinin bir listesini girer:
$tags = array_unique(array_map(explode(',', $POST['tags']), 'trim'));
ve kullanıcının girdiği etiketleri bir dizi var. Sadece bazı karakterleri sağlayan ve / veya küçük harfe onları dönüştürme gibi, daha da sterilize etmek isteyebilirsiniz.
Sonra kod olur:
$post_id = ...
foreach ($tats as $tag) {
$tag = mysql_real_escape_string($tag);
$sql = <<<END
INSERT INTO PostTag (post_id, tag_id)
VALUES ($post_id, (SELECT id FROM Tag WHERE tag_name = '$tag'))
END;
mysql_query($sql);
}