这就是我正在尝试做的事情。我的老板想把我们拥有的所有车辆放在主页上,并一次随机抽取 8 辆。我们的数据库模式的设置方式将产品和类别放在单独的表中,使用交叉引用来定位产品所属的类别。包含类别的表有一个父级,它是来自另一个类别的直接 ID。这是我想出的 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,但产品仍然被选择了两次。
谢谢!
最佳答案
DISTINCT 应该有效。如果没有,请尝试按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
关于SQL 选择单个类别中的产品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3916182/