2010-12-08 76 views
4

我希望分页脚本能够正常工作,但情况有点复杂。我需要从两个SQL查询的联合中选择数据。请参阅下面的查询。我有一本桌子书和一本桌子书。我想要的是在这里按照人气顺序显示特定类别的所有书籍。通过加入餐桌书和书籍,我通过至少一次访问获取所有书籍的数据。然后将它与所有没有访问的书籍结合起来。一切正常,但当我尝试做分页时,我需要将它限制为(0,10)(10,10)(20,10)(30,10),对吗?如果我有9本书籍用于该类别,3761本书没有任何访问(总共3770本书),它应该列出377页,每页上有10本书。但它不显示任何数据,因为它试图显示限制3760,10的书籍,因此没有联合记录中的第二个查询。可能是我无法清除这里的情况,但如果你对情况有所了解,你会明白我的观点。mysql联盟限制问题

SELECT * FROM ( 
SELECT * FROM (
SELECT viewcount, b.isbn, booktitle, stock_status, price, description FROM book AS b 
INNER JOIN bookvisit AS bv ON b.isbn = bv.isbn WHERE b.price <> 0 AND hcategoryid = '25' 
ORDER BY viewcount DESC 
LIMIT 10, 10 
) AS t1 
UNION 
SELECT * FROM 
( 
SELECT viewcount, b.isbn, booktitle, stock_status, price, description FROM book AS b 
LEFT JOIN bookvisit AS bv ON b.isbn = bv.isbn WHERE b.price <> 0 AND hcategoryid = '25' 
AND viewcount IS NULL 
ORDER BY viewcount DESC 
LIMIT 10, 10 
) AS t2 
) 
    AS qry 
    ORDER BY viewcount DESC 
LIMIT 10 

回答

2

不要对单独的查询使用限制。仅在最后使用限制。您希望从2个查询中获得洞结果集,然后仅显示您需要的10个结果,无论这是限制0,10还是极限3760,10

SELECT * FROM ( 
SELECT * FROM ( 
    SELECT viewcount, b.isbn, booktitle, stock_status, price, description FROM book AS b 
    INNER JOIN bookvisit AS bv ON b.isbn = bv.isbn WHERE b.price <> 0 AND hcategoryid = '25' 
    ORDER BY viewcount DESC 
) AS t1 
UNION 
SELECT * FROM 
( 
    SELECT viewcount, b.isbn, booktitle, stock_status, price, description FROM book AS b 
    LEFT JOIN bookvisit AS bv ON b.isbn = bv.isbn WHERE b.price <> 0 AND hcategoryid = '25' 
    AND viewcount IS NULL 
    ORDER BY viewcount DESC 
) AS t2 
) 
AS qry 
ORDER BY viewcount DESC 
LIMIT 10, 10 
+0

不,它可能会显示10,000个结果将不得不使用限制 – 2010-12-08 12:27:13