4

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

样本数据

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

urlurl_table哪里选择trend_id= '12'

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

选择“12”作为parent_trend_idurlurl_table哪里(trend_id=“12”或trend_id=“16”或trend_id=“45”)

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

选择“345”作为parent_trend_idurlurl_table哪里(trend_id=“345”或trend_id=“457”或trend_id=“16”)

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

编辑:

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

关系表样本数据

4

2 回答 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

你期待什么结果?

于 2012-07-27T19:30:31.867 回答
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)是您要为其提取元组的所有父趋势。

于 2012-07-27T19:34:52.740 回答