将多个查询的行合并为一个查询

4

我正在用PHP和MySQL构建一个社交媒体新闻聚合Web应用程序。它需要将各种URL(列URL)映射到特定的趋势(列trend_id)。这是我的虚拟数据结构:

Sample data

我需要构建一个查询,以获取特定trend_id(例如12)的URL。这很简单:

SELECT url FROM url_table WHERE trend_id = '12'

现在,一些趋势与特定的父趋势相关联。例如,trend_ids 12、16和45与父trend_id 12相关联。所以这是我的查询:

SELECT '12' as parent_trend_id,url FROM url_table WHERE (trend_id = '12' OR trend_id = '16' OR trend_id = '45')

这是另一个类似查询的例子:

SELECT '345' as parent_trend_id,url FROM url_table WHERE (trend_id = '345' OR trend_id = '457' OR trend_id = '16')

问题在于,趋势之间存在多个这样的父子关系。目前我在PHP中运行一个for循环,并执行多个查询。另外,鉴于我的应用程序的性质,父趋势不能成为此表的一部分。是否有一种方法可以将多个这样的查询合并为单个查询?

编辑:

我有一个单独的表来定义关系。它是一个简单的3列表,包括ID、trend_id(父)和related_trend_id(子)。然而,一个related_trend_id(子)可以有多个trend_ids(父)。以下是关系表的快照:

Relations table sample data


我已经更新了我的查询以使用这个表...应该可以正常工作。 - Hogan
2个回答

2
您的具体查询现在将是:


SELECT r.trend_id as parent_trend_id,url 
FROM url_table
Join relations r on r.related_trend_id = childid
WHERE r.trend_id = 12

或者获取它们的全部。
SELECT r.trend_id as parent_trend_id,url 
FROM url_table
Join relations r on r.related_trend_id = childid

对我来说,它完全按预期工作:

http://sqlfiddle.com/#!3/b137a/9

你期望的结果是什么?


无法工作...可能是因为一个子元素可能有多个父元素。那么,有没有办法将多个Select语句的结果简单地合并成一个...就像合并所有行一样? - Akshay Raje
1
我可以在SQL Server上合并行,但我不知道如何在MySQL上做到这一点 - 我建议你只需在客户端程序中完成,PHP在这种字符串操作方面更擅长。 - Hogan
刚刚完成了这个任务,使用 PHP 创建了一个 UNION 查询来将行合并为一个子表。 - Akshay Raje

0

加入包含父子关系的表格吗?

SELECT url_table.*
FROM url_table
INNER JOIN parents
    ON url_table.trend_id = parents.trend_id
WHERE parents.parent_id IN (1,2,3);

(1,2,3) 是您想要提取元组的所有父趋势。


他没有父母表。 - Hogan
@Hogan 我有一个包含父子关系的表格。我会在编辑中添加上去。 - Akshay Raje
@AkshayRaje - 哈哈大笑,如果你想得到一些好的回答,那可能会有所帮助。 - Hogan
@Hogan,有一个复杂情况,可能存在多个父级。这是一个“相关趋势”表,因此related_trend_id可能与多个trend_id相关联。 - Akshay Raje
@AkshayRaje 如果你给我们展示表格,那么这并不难。然后我们可以提供帮助。 - Hogan
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接