php 标签层,php – 高性能多层标签过滤

我有一个大型的艺术家,专辑和曲目的数据库.这些项目中的每一个可以具有通过胶合表(track_attributes,album_attributes,artist_attributes)分配的一个或多个标签.有几千(甚至十万)标签适用于每个项目类型.

我正在努力完成两项任务,我很难让查询执行得很好.

任务1)获得所有具有任何给定标签(如果提供)的曲目,该艺术家在具有任何给定标签的相册(如果提供)上有任何给定标签(如果提供)).任何一组标签可能不存在(即只有一个曲目标签是有效的,没有艺术家或专辑标签)

变化:结果也可以由艺术家或专辑而不是轨道呈现

任务2)获取应用于先前过滤器的结果的标签列表以及每个给定标签的轨迹数.

我以后是一些一般的指导方法.我已经尝试过临时表,内部连接,IN(),所有我的努力迄今为止导致缓慢的响应.以下结果的一个很好的例子可以在这里看到:http://www.yachtworld.com/core/listing/advancedSearch.jsp,除了它们只有一层标签,我正在处理三个标签.

表结构:

Table: attribute_tag_groups

Column | Type |

------------+-----------------------------+

id | integer |

name | character varying(255) |

type | enum (track,album,artist) |

Table: attribute_tags

Column | Type |

--------------------------------+-----------------------------+

id | integer |

attribute_tag_group_id | integer |

name | character varying(255) |

Table: track_attribute_tags

Column | Type |

------------+-----------------------------+

track_id | integer |

tag_id | integer |

Table: artist_attribute_tags

Column | Type |

------------+-----------------------------+

artist_id | integer |

tag_id | integer |

Table: album_attribute_tags

Column | Type |

------------+-----------------------------+

album_id | integer |

tag_id | integer |

Table: artists

Column | Type |

------------+-----------------------------+

id | integer |

name | varchar(350) |

Table: albums

Column | Type |

------------+-----------------------------+

id | integer |

artist_id | integer |

name | varchar(300) |

Table: tracks

Column | Type |

-------------+-----------------------------+

id | integer |

artist_id | integer |

album_id | integer |

compilation | boolean |

name | varchar(300) |

编辑我正在使用PHP,我不反对在脚本中做任何排序或其他hijinx,我的第一个关注是返回的速度.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值