2012-02-14 79 views
2

這是我在這個論壇上的第一篇文章(所以請溫柔)加入了MySQL的查詢和LIMIT

我正在龐大的產品數據庫和我有關於他們的相關信息的許多表。

有一個表,看起來像這樣:

產品

  • PRODUCT_ID
  • 品牌

而且具有不同類型的另一個表同樣的產品看起來像這樣:

PRODUCT_TYPE

  • TYPE_ID
  • 成本
  • PRODUCT_ID

我使用連接選擇表和它工作正常,但由於有更多的在這兩個表格中我都想要限制選擇並只顯示15個一個頁面上的條目。

所以這纔是我的問題:

我選擇這兩個表連接,並限制他們15但是,由於有更多類型的產品比我選擇屬於一個未知的產品數量(因爲一個產品15種產品可以有1個,2個或任意數量的類型)。我需要能夠在兩個表中搜索並根據兩列中的結果排序結果,並且從每個產品中只選擇15個條目並從product_types中選擇一個條目是不好的,因爲我需要所有類型來顯示...

所以你能幫我,我該怎麼辦?我有點卡住了。 (我希望我的描述可以理解)

+7

歡迎來到StackOverflow!請發佈與問題相關的代碼。它會幫助我們幫助你。 – 2012-02-14 08:31:11

+0

您可以請張貼一些示例表格數據和預期的輸出 – 2012-02-14 09:00:36

回答

2

有很多方法可以實現這一點。我看到的主要困難是你需要在兩個表格的列上排序。因此,前15個不同的產品將出現在可變數量的行中,給出與類型的關係。最簡單的方法可能是用GROUP_CONCAT

SELECT 
    p.*,GROUP_CONCAT(t.type) 
FROM 
    products p INNER JOIN types t ON p.product_id=t.product_id 
WHERE 
    [your WHERE clauses] 
GROUP BY 
    p.product_id 
ORDER BY 
    [columns] 
LIMIT 15 

然而,這爲您提供有關類型的數據有限,並可能給你的問題在你的ORDER BY因爲這樣的組後發生。

你可能想要做這樣的事情

SELECT 
    * 
FROM 
    (SELECT 
     DISTINCT p.* 
    FROM 
     products p INNER JOIN types t ON p.product_id=t.product_id 
    WHERE 
     [your WHERE clauses] 
    ORDER BY 
     [columns] 
    LIMIT 15) pl 
INNER JOIN types tl ON pl.product_id=tl.product_id 

這是什麼應該做的是從你的產品表中的前15個不同的行上您的類型的表連接,並通過您的標準下單,然後讓所有這些產品的類型。