繁体   English   中英

SQL RAND查询选择所有记录并且不使用联接表

[英]SQL RAND Query selecting all records and not using joined table

请有人通过我正在开发的网站继承的查询与我交谈。

该查询基于类别编号56返回5个产品的随机组。查询存在问题,因为它不限制基于Web和产品归档条件下的产品选择。

AND p.product_OnWeb = 1
AND p.product_Archive = 0

查询中的以上行未得到遵守。 而是,查询将包括所有产品,即使它们被标记为p.product_Archive=1 (已存档)并且p.product_OnWeb = 0 (不在线)

如果有人指出我需要在哪里进行更改,我将不胜感激。

完整查询为:

SELECT c.prdt_cat_rel_Product_ID,
ROUND(RAND() * x.m_id) 'rand_ind'
FROM tbl_prdtcat_rel c,
tbl_products p,
(SELECT MAX(t.prdt_cat_rel_Cat_ID) 'm_id'
FROM tbl_prdtcat_rel t) x
WHERE c.prdt_cat_rel_Cat_ID = 56
AND p.product_OnWeb = 1
AND p.product_Archive = 0
ORDER BY rand_ind
LIMIT 3

谢谢

首先,为了简化操作,将查询转换为较新的联接语法

 SELECT c.prdt_cat_rel_Product_ID,    ROUND(RAND() * x.m_id) 'rand_ind'
  FROM tbl_prdtcat_rel c,
  JOIN tbl_products p ON p.??? = c.???
  JOIN (
     SELECT MAX(t.prdt_cat_rel_Cat_ID) 'm_id' FROM tbl_prdtcat_rel t
       ) x  ON 1=1
  WHERE c.prdt_cat_rel_Cat_ID = 56
    AND p.product_OnWeb = 1
    AND p.product_Archive = 0
    ORDER BY rand_ind
    LIMIT 3

您可以看到查询不知道如何从基于C的P中选择匹配记录,因此它将全部捕获。。您需要指定如何将tbl_prdtcat记录与tbl_product记录进行匹配(将上面的???替换为适当的字段)

我猜p中的每个产品都有某种字段指示它属于哪个类别,使用此字段进行匹配,您的查询应该可以工作...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM