2010-06-15 41 views
0

我有兩個表格,一個是包含數字資產(例如文章,圖片等)的資產表格,第二個表格是asset_links表格,它映射資產表格中包含的資產之間的1-1關係。查詢返回相關資產

下面是表定義:

CREATE TABLE `asset` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `source` varchar(255) DEFAULT NULL, 
    `title` varchar(255) DEFAULT NULL, 
    `date_created` datetime DEFAULT NULL, 
    `date_embargo` datetime DEFAULT NULL, 
    `date_expires` datetime DEFAULT NULL, 
    `date_updated` datetime DEFAULT NULL, 
    `keywords` varchar(255) DEFAULT NULL, 
    `status` int(11) DEFAULT NULL, 
    `priority` int(11) DEFAULT NULL, 
    `fk_site` int(11) DEFAULT NULL, 
    `resource_type` varchar(255) DEFAULT NULL, 
    `resource_id` int(11) DEFAULT NULL, 
    `fk_user` int(11) DEFAULT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB; 

CREATE TABLE `asset_links` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `asset_id1` int(11) DEFAULT NULL, 
    `asset_id2` int(11) DEFAULT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB; 

在asset_links表有以下行:

INSERT INTO `Asset_links` (asset_id1, asset_id2) VALUES 
(1,3), (1,4), (2,10), (2,56); 

我期待編寫一個查詢將返回滿足任何資產的所有資產搜索條件並在同一查詢中返回該資產的鏈接資產的所有鏈接資產數據。

例如該查詢返回的資產1和2將返回:

  • 資產1屬性

    • 資產3屬性
    • 資產4屬性
  • 資產2屬性

    • 資產10屬性
    • 資產56屬性

是編寫查詢的最好方法?

+0

你能在閱讀後回答你的問題嗎?花些時間閱讀常見問題解答並正確設置代碼格式。 – Anax 2010-06-15 23:53:30

+0

我試圖格式化它,但沒有代碼標籤的原始粘貼刪除了空格。 OP可以放回去。 – 2010-06-15 23:58:58

+0

我已經編輯了OP的表格定義,使其更具可讀性。 – 2010-06-16 00:41:11

回答

0
SELECT a1.*, a2.* 
FROM Asset a1 
LEFT OUTER JOIN (Asset_Links l JOIN Asset a2 ON l.asset_id2 = a2.id) 
    ON (a1.id = l.asset_id1) 
WHERE a1.id IN (1, 2) 
    AND ...whatever conditions you want here... 

我爲您的「任何搜索條件」留下佔位符文本,因爲這不是一個真正的問題。


重新評論:在一個查詢中,您無法從關係數據庫中獲取結果。 SQL查詢結果必須在每一行上具有相同的列,並且每行都具有這些列的值。您無法在單個SQL查詢中完成您所描述的內容。

如果你想要一個超級行和子行的結果集,你必須使用非關係數據庫。嘗試CouchDB或MongoDB。

+0

感謝您的回覆。對不起,我沒有正確解釋我之後的事情。 根據asset_links表中的上述數據,此查詢返回6行。 根據asset_links表中的上述數據,我希望它返回2行並將相關行作爲行的子集: 感謝您的幫助 – GMo 2010-06-18 05:07:26