我正在使用PHP和MySQL构建社交媒体新闻聚合Web应用程序。它需要将各种URL(列url)映射到特定趋势(列trend_id)。这是我的虚拟数据结构:
我需要构建一个查询来获取特定trend_id的URL(例如12)。这很简单:
SELECT
url
FROMurl_table
WHEREtrend_id
='12'
现在,一些趋势与特定的父趋势有关。例如,trend_ids 12,16和45与父trend_id 12相关。所以这是我的查询:
选择'12'为
parent_trend_id
,url
FROMurl_table
WHERE(trend_id
='12'或trend_id
='16'或{{1 }} ='45')
这是类似查询的另一个例子:
选择'345'作为
trend_id
,parent_trend_id
FROMurl
WHERE(url_table
='345'或trend_id
='457'或{{1 }} ='16')
问题在于趋势之间存在多个这样的亲子关系。截至目前,我在PHP中运行for循环并执行多个查询。此外,鉴于我的应用程序的性质,父趋势不能成为此表的一部分。有没有办法让一个查询多个这样的查询?
修改
我有一个单独的表定义子关系。它是一个简单的3列表,包含ID,trend_id(父)和related_trend_id(子)。但是,一个related_trend_id(子)可以有多个trend_ids(父项)。这是关系表的快照:
答案 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)
是您要提取元组的所有父趋势。