SQL 选择单个类别中的产品

标签 sql mysql coldfusion

这就是我正在尝试做的事情。我的老板想把我们拥有的所有车辆放在主页上,并一次随机抽取 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/

相关文章:

sql - 从 SQL 中的 SELECT 中选择

mysql - SQL 多行相乘得到一行

Python 和 MySQL 打印结果

php - PDOStatement 类的对象无法转换为字符串(帮助)

coldfusion - CF11 更新 5 后,cfstoredproc 不再返回结果

github - github 和编码流程

mysql - sequelize 你正在使用 sql 安全更新错误

sql - 约束是在自定义触发器之前还是之后执行的?

mysql - G-WAN 和持久 MySQL 连接

java - 实例化 Java 对象时发生异常。该类不能是接口(interface)或抽象类。错误 : javax/mail/Store