2014-11-08 59 views
0

我想把兩個查詢放在一起;一個來自我的posts表格,另一個來自我的store_products表格,並將結果顯示在同一頁面上。mySQL多選:1複雜1簡單

,所以我想利用這個......

SELECT 
     p.id AS pid 
    , p.uid 
    , p.title 
    , p.created_at 
    , u.id AS uid 
    , u.username 
    , u.avatar 
    , f.following 
    , l.uid AS liked 
    , u2.username AS source_username 
    , u2.avatar AS source_avatar 
    , u2.created_at AS source_created_at 
FROM posts p 
LEFT JOIN users u ON p.uid=u.id 
LEFT JOIN posts_likes l ON l.pid=p.id 
LEFT JOIN follow f ON u.id = f.following 
LEFT JOIN posts p2 ON p.source_hash = p2.hash 
LEFT JOIN users u2 ON u2.id = p2.uid 
WHERE (f.user=2 OR p.uid=2) 
GROUP BY p.id ORDER BY p.id DESC 

,並把它與這樣的事情...

SELECT name, price FROM store_products WHERE uid=2 

我試過多次SELECT陳述,UNION,在那裏我」 d通過使用NULL彌補cols的差異,我試過LEFT,RIGHTINNER聯接,但所有這些操作都是將產品信息添加到其他郵政行中,而不是創建se爲每個產品分配行。

的結果集,我找的就是類似於這個

[0] Post 1 
[1] Post 2 
[2] Product 1 
[3] Post 3 
[4] Product 2 

等等

編輯:回答問題。兩個表之間的唯一關係是用戶標識,否則它們是完全獨立的。我想爲訪問者提供帖子和產品的列表,並且我試圖在一個查詢中執行此操作以節省服務器負載,並且將它們放在同一列表中而不是單獨的列表中。

+0

帖子和產品之間是否有任何關係?爲什麼'Post 2'後的產品1? – Barmar 2014-11-08 18:34:26

+0

你的問題不是很清楚。帖子和產品之間有什麼關係?你能提供一些樣本數據嗎? – abl 2014-11-08 18:34:41

+0

'SELECT ...,sp.name,sp.price ... ... LEFT JOIN users on ON p.uid = u.id LEFT JOIN store_products AS sp ON(sp.uid = u.uid)'will do你問:爲每個產品添加行,這兩個額外的列中的每一列都會報告產品的名稱和價格(或NULL)。 **但是,如何顯示這個**,它不是MySQL的轄區。您需要添加一些關於您用來製作您的「網頁」的內容,或許還有一些問題標籤。很可能你應該*做的是將這兩個查詢分開,並將它們以不同的方式集成到你選擇的CMS中。 – LSerni 2014-11-08 18:37:44

回答

0

使用UNION:

SELECT 
     "Post" AS type, 
    , p.id AS pid 
    , p.uid 
    , p.title 
    , p.created_at 
    , u.id AS uid 
    , u.username 
    , u.avatar 
    , f.following 
    , l.uid AS liked 
    , u2.username AS source_username 
    , u2.avatar AS source_avatar 
    , u2.created_at AS source_created_at 
    , NULL AS product_name 
    , NULL AS price 
FROM posts p 
LEFT JOIN users u ON p.uid=u.id 
LEFT JOIN posts_likes l ON l.pid=p.id 
LEFT JOIN follow f ON u.id = f.following 
LEFT JOIN posts p2 ON p.source_hash = p2.hash 
LEFT JOIN users u2 ON u2.id = p2.uid 
WHERE (f.user=2 OR p.uid=2) 
GROUP BY p.id 
ORDER BY p.id DESC 

UNION 

SELECT 
     "Product" AS type 
    , NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL 
    , name, price 
FROM store_products 
WHERE uid = 2 

應用程序代碼可以檢查type列,以確定它是否打印PostProduct,並適當地格式化。

+0

完美!這正是我所期待的。謝謝! :) – timgavin 2014-11-08 19:27:38