2010-06-25 38 views
0
下面

是我需要指数狮身人面像表 alt text需要对狮身人面像查询和索引配置建议

消息已经通过news_projects表链接到它的很多项目......

我的问题是它最好将所有项目名称放在一个文本字段中以便可以搜索?

这是我的查询:

//query to get the project names and make all project names appear in one field separated by comma. 
SELECT 
    news.id 
    news.headline, 
    news.body, 
GROUP_CONCAT(DISTINCT projects.project_name) as related_projects 
FROM news 
LEFT JOIN news_projects on news.id = news_projects.news_id 
LEFT JOIN projects on news_projects.project_id = projects.id 
GROUP BY news.id 

这将格式为“姓名,名称2,名称3”

林有点拿不定主意天气PROJECT_NAME列然后输出行使用这个或者只是使PROJECT_ID一个属性..有project_name作为文本是绝对的大帮助,因为它可以搜索...

请..我需要你对此的意见..非常感谢!

+0

这是一个狮身人面像或思维狮身人面像的问题?它被标记为思维狮身人面像,但似乎是直的狮身人面像? – 2010-06-25 09:59:40

+0

只是狮身人面像..我删除了思维狮身人面像标记已经... – r2b2 2010-06-25 13:35:14

+0

这是不相关的你的问题,但你不需要[id]在news_projects表。你只需要PRIMARY(news_id,project_id) – Rafa 2011-10-04 08:31:13

回答

1

如果项目名称对搜索有用,那么一定要保留它。不过,我建议使用空格而不是逗号连接(虽然在使用默认设置时,狮身人面像可能并不重要)。

将项目ID作为多值属性(MVA)可能也很有用 - 这意味着您可以将搜索结果限制为特定项目中的新闻项目。没有理由不这样做,真的。

+0

整数项目ID的性能也更好,因为你不匹配字符串。 – 2010-07-07 03:02:35

+0

事实上,这取决于您想要做什么:将搜索结果限制在特定项目中(对项目ID使用MVA),或者将文本中包含的项目名称与搜索查询(项目名称字段)进行匹配。 – pat 2010-07-07 15:03:57

1

您还可以使用sql_joined_field指定related_projects字段。它可能会更快,因为您可以从主查询中删除分组。

sql_query = SELECT id, headline, body FROM news 

sql_joined_field = related_projects from query; \ 
    SELECT news_projects.news_id, projects.project_name \ 
    FROM news_projects \ 
    JOIN projects ON projects.id = news_projects.project_id \ 
    ORDER BY news_projects.news_id ASC 

如果你做增量指标,不过,你必须三角洲条件复制到所有连接字段(与相同范围查询),这可能有点痛。

+0

这应该被标记为答案。 +1。 – patrickn 2012-10-27 01:08:40