动态导航的奇怪查询结果

时间:2011-01-02 18:03:37

标签: php sql

在询问我的last question之后,我认为问题已经解决了,并且当我尝试解决时,提供的答案正在运行。

现在的问题是导航选择数据库中的上一行和下一行,直到product_id为100+,然后失败。

以下是我用来生成链接的代码:

$prevProduct = $prod - 3;
$queryNextProductID = 'SELECT product_id FROM products WHERE product_id > '.$prod.' AND   category='.$cat.' LIMIT 1';
$queryPrevProductID = 'SELECT product_id FROM products WHERE product_id < '.$prod.' AND   category='.$cat.' LIMIT '.$prevProduct.',1';

$queryPrevProductID返回空结果集时,product_id 1 3 5 80 103 104 将返回表中的上一行,直到100+。

这是我的表格的简化版本,以便更好地解释这个问题:

product_id=3

1页面上,上一个链接为5,下一个链接为product_id=80
5页面上,上一个链接为103,下一个链接为product_id=103
104页面上,上一个链接不在那里,下一个链接将是{{1}}

关于这个问题的任何想法?

2 个答案:

答案 0 :(得分:1)

更改您的查询。不需要使用带偏移的限制。此外,您还需要使用“ORDER BY product_id”或下一个产品以及“ORDER BY product_id DESC ”作为上一个产品。

$queryNextProductID = 'SELECT product_id FROM products WHERE product_id > '.$prod.' AND   category='.$cat.' ORDER BY product_id LIMIT 1';
$queryPrevProductID = 'SELECT product_id FROM products WHERE product_id < '.$prod.' AND   category='.$cat.' ORDER BY product_id DESC  LIMIT 1';

答案 1 :(得分:0)

您正在使用LIMIT:

LIMIT '.$prevProduct.',1'

那将会遇到

LIMIT 100,1

这不会将结果集限制为'product_id'= 100的行之后的1行,而是结果中第100行之后的1行。

只需删除代码'.$prevProduct.'并使用ORDER BY product_id对结果进行排序。

相关问题