2010-10-12 32 views
2

所以這就是我想要做的。我的老闆想把我們擁有的所有車輛放在我們的主頁上,並隨機抽出8輛。我們的數據庫架構的設置方式包含產品,並使用交叉引用來分類表單中的類別以查找產品所屬的類別。帶有類別的表格有一個來自另一個類別的直接ID。所以這裏是我提出的SQL。SQL在一個類別中的產品選擇

SELECT  product.productID, 
       product.productSKU, 
       product.price, 
       product.name, 
      product.stateInd, 
       category.parentID, 
       category.categoryID, 
       prod_cat.productID FROM category 

LEFT JOIN prod_cat 
    ON prod_cat.categoryID = category.categoryID 
LEFT JOIN product 
    ON product.productID = prod_cat.productID 

WHERE category.parentID = <cfqueryparam value="#catID#" cfsqltype="cf_sql_varchar" /> AND product.name <> "" AND RAND() 

LIMIT 8 

我希望一切都有道理。我只有最難的時候不僅要拉8件產品,還要確保這8件產品是獨一無二的。哦,我確實在選擇之後嘗試了DISTINCT,但產品仍然選擇了兩次。

謝謝!

回答

5

DISTINCT應該可以工作。如果沒有,請嘗試group by productId。要選擇隨機行,請按rand()排序,而不是where rand()構造。

結合使用這兩種:

WHERE category.parentID = <cfqueryparam value="#catID#" cfsqltype="cf_sql_varchar"/> 
     AND product.name <> "" 
GROUP BY 
     product.productID 
ORDER BY 
     RAND() 
LIMIT 8 
+0

好清涼!我正在做更多的工作,並得到了蘭特的訂單......但它仍然是重複的。那時候我意識到我們有兩個產品具有相同的名稱,相同的圖片只是不同的零件編號......如果這是有道理的:)反正我也會按順序嘗試順序!非常感謝! + – 2010-10-12 15:29:26

0

我拉8種獨特的產品在一個子查詢,然後使用在查詢中的其餘部分。

在非常粗糙的僞代碼:

select ... 
    from (select 8 distinct random product IDs from product table) p 
     left join prod_cat 
      on p.productID = prod_cat.productID 
     left join category 
      on prod_cat.categoryID = category.categoryID 
    ... 
+0

我正要發佈相同的內容。先選擇8個產品,然後再加入。 – 2010-10-12 15:33:28

+0

好的!我也喜歡這個。這會提高性能嗎? – 2010-10-12 15:36:17

+0

@Nathan:測試並比較兩個版本。 – 2010-10-12 15:47:16

0

注:喬打我這個答案,但我不知道如何把代碼中的註釋,所以這裏是我的答案。

我不知道的categoryID會給單行或多行您的輸入,如果是單排,可以很好地使用=代替in

SELECT * 
    FROM (SELECT * FROM product 
     WHERE product.productID in (
      SELECT productID 
       FROM prod_cat 
      WHERE categoryID in ( 
        SELECT categoryID 
        FROM category 
        WHERE parentID = 
          <cfqueryparam 
          value="#catID#" 
          cfsqltype="cf_sql_varchar" /> 
          ) 
       AND name <> '' 
      ORDER BY rand() 
      LIMIT 8 
      ) p 
INNER JOIN prod_cat ON p.productID=prod_cat.productID 
INNER JOIN category ON prod_cat.categoryID=category.categoryID 
+0

酷!謝謝我的男人肯定會看到有關測試兩種方式!謝謝你的幫助。更新:只是試過了......不幸的是我的MySQL版本不支持上述子查詢的一些功能。絕對希望它會工作想給這個嘗試: - / – 2010-10-12 16:00:56

相關問題