MySQL问题中的连接表(php)
情况:
在我的数据库中,我有一个名为“艺术家”和“标签”的表。
每个艺术家都有一组标签,保存在链接表“artisttags”中。
每个唯一标签都保存在名为“标签”的表中。
问题
我想显示与给定艺术家有一个(或多个)共同标签的所有艺术家。
function getSimilarArtists($artist_id)
{
$sql = "SELECT ...";
$query = mysql_query($sql);
while($artist = mysql_fetch_assoc($query))
{
$html .= "<li>".$artist['name']."</li>"
}
print($html);
}
表格
艺术家
id | name
artisttags
id | artist_id | tag_id
标签
id | tag_name
欢迎任何帮助。
谢谢
Situation:
In my database I have a table called 'artists' and 'tags'.
Each artist has a set of tags, saved in a linking table 'artisttags'.
Each unique tag is saved in a table called 'tags'.
Problem
I would like to show all artists that have one (or more) tags in common with a given artist.
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
Any help is welcome.
Thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
Mitosz 回复中的那些外部连接确实会造成伤害 - 并将返回每个艺术家 - 而不仅仅是那些具有“一个(或多个)共同标签”的艺术家。使用内部联接 当然
,对于更智能的索引系统,您可以对标签表中的每个标签应用评分(例如,基于用户投票或基数),并按 SUM(tag.score) 对结果进行排序。
Those outer joins in Mitosz's reply are really going to hurt - and will return every artist - not just those with "one (or more) tags in common". Use Inner Joins instead
Of course, for a smarter indexing system you could apply scoring to each tag in the tags table (e.g. based on user votes or cardinality) and sort your results by SUM(tag.score).