将多个查询的行组合成一个

时间:2012-07-27 19:27:06

标签: php mysql sql

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

Sample data

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

  

SELECT url FROM url_table WHERE trend_id ='12'

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

  

选择'12'为parent_trend_idurl FROM url_table WHERE(trend_id ='12'或trend_id ='16'或{{1 }} ='45')

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

  

选择'345'作为trend_idparent_trend_id FROM url WHERE(url_table ='345'或trend_id ='457'或{{1 }} ='16')

问题在于趋势之间存在多个这样的亲子关系。截至目前,我在PHP中运行for循环并执行多个查询。此外,鉴于我的应用程序的性质,父趋势不能成为此表的一部分。有没有办法让一个查询多个这样的查询?

修改

我有一个单独的表定义关系。它是一个简单的3列表,包含ID,trend_id(父)和related_trend_id(子)。但是,一个related_trend_id(子)可以有多个trend_ids(父项)。这是关系表的快照:

Relations table sample data

2 个答案:

答案 0 :(得分: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

您期望得到什么结果?

答案 1 :(得分: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)是您要提取元组的所有父趋势。