2012-07-27 48 views
4

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

Sample data

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

选择url FROM url_table WHERE trend_id = '12'

现在,一些趋势都与特定父趋势。例如trend_ids 12,16和45都与父trend_id 12.因此,这里是我的查询:

SELECT '12' parent_trend_idurl FROM url_table WHERE(trend_id = '12' OR trend_id = '16' OR trend_id = '45')

这里的类似查询的另一个示例:

SELECT '345' 作为parent_trend_idurl FROM url_table WHERE(trend_id = '345' OR trend_id = '457' OR trend_id = '16')

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

编辑:

我有一个单独的表定义 孩子 关系。这是一个带有ID,trend_id(父级)和related_trend_id(子级)的简单3列表。然而,一个related_trend_id(子)可以有多个trend_id(父母)。这里的关系表的快照:

Relations table sample data

+0

我已更新我的查询以使用此表...应该正常工作。 – Hogan 2012-07-27 20:29:52

回答

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

你期望的结果是什么?

+0

不工作......可能是因为可能有多个孩子的父母。那么,有没有办法简单地将多个Select语句的结果合并成一个......就像合并所有行一样? – 2012-07-27 21:19:30

+0

@AkshayRaje看到小提琴。 – Hogan 2012-07-27 22:48:07

+1

我可以结合SQL服务器上的行,但我不知道如何做到这一点在MySQL - 我建议你只是在客户端程序中做到这一点,PHP是在这种字符串操纵更好。 – Hogan 2012-07-27 22:49:12

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)被分配为要提取的元组的所有父趋势。

+0

他没有父母的桌子。 – Hogan 2012-07-27 19:38:49

+0

@Hogan我有一张父母子女关系表。将编辑 – 2012-07-27 19:40:19

+0

@AkshayRaje - ROFL,如果你想得到一些好的答案可能会有所帮助。 – Hogan 2012-07-27 19:41:44