2012-07-27 93 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