4

我知道事情被错误地转义了,但是我正在尝试编写一个上一个/下一个查询来获取订单中的下一个 id 和上一个 id,但是我的输出与它应该的 phpmyadmin 排序不匹配。我只写了“下一个”,并且会用相反的条件写上一个。这个查询似乎给了我订单中下一个最高的 ID 值...我需要订单索引中的下一个或上一个...有人可以帮忙吗?

$db = JFactory::getDBO();
$query = "SELECT image_id FROM #__jxgallery_images WHERE image_id >".$currentid."' ORDER   BY '".$ordering." ".$direction." LIMIT 1";
// Executes the current SQL query string.
    $db->setQuery($query);
// returns the array of database objects
    $list = $db->loadObjectList();
// create the list of ids
    foreach ($list as $item) {
    $next = $item->image_id;
    echo $next.'<br/>';
    }
echo 'The next ID in this sort state is&nbsp;'.$next.'<br />';
?>

这是phpmyadmin,它是正确的......

SELECT * FROM `jos_jxgallery_images` 
ORDER BY `jos_jxgallery_images`.`hits` DESC 
LIMIT 0 , 30

我现在已经在我的代码中匹配了这个查询以获得相同的结果。我的变量填充了我的子句中的 ($ordering) 'hits' 字段和 'desc' ($direction)。这很好用。image_ids 和 hits 并不特别……只是数字。当命中排序时,image_ids 会重新匹配。对于该字段中的内容,我不需要 image_id 的下一个值。我需要下一行或上一行,无论值如何,都基于当前的 image_id I 插件。

这些是实际的 image_ids LIMIT 5,它们按 hits 字段降序排列:

52791 
52801 
52781 
52771 
52581`

现在,如果我正在查看的当前图像的 id 为52791,那么 previous 应该是 nothing 而 next 应该是52801。我认为我的查询正在做的是给我一个更高值的 image_id 作为“下一个”,因为这是下一个最高 VALUED 的 image_id,而不是下一行。我可以看到为什么在查询中,我要求大于...但我只需要下一行

4

1 回答 1

0

我认为问题在于您的 WHERE 条件:WHERE image_id >".$currentid."'

如果我了解您要执行的操作,则一种方法是:

$query = "SELECT image_id FROM `#__jxgallery_images` ORDER BY ".$ordering." ".$direction." LIMIT 2";

$db->setQuery($query);

$list = $db->loadObjectList();

$next_item = $list[1]->image_id;

请注意,从查询中删除了 WHERE 条件,并且我也更改LIMIT 1LIMIT 2. 这样,查询基本上会返回您的最高值和具有下一个最高“命中”值的值。

我希望这有帮助。

于 2012-08-07T04:41:32.327 回答