SQL RAND查询选择所有记录而不使用连接表

时间:2014-04-28 07:33:25

标签: mysql sql random

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

查询将根据类别编号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

三江源

1 个答案:

答案 0 :(得分:0)

首先,为了使其更容易,请将查询转换为较新的连接语法

 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中的每个产品都有某种字段,表明它属于哪个类别,使用此字段进行匹配,您的查询应该有效...