Joomla中的mysql orderby中的下一个和上一个SQL语句

Posted

技术标签:

【中文标题】Joomla中的mysql orderby中的下一个和上一个SQL语句【英文标题】:mysql within Joomla next and previous SQL statement within orderby 【发布时间】:2012-08-03 17:04:53 【问题描述】:

我知道事情被错误地转义了,但我正在尝试编写一个上一个/下一个查询来获取订单中的下一个 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,它们按命中字段降序排序:

52791 
52801 
52781 
52771 
52581`

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

【问题讨论】:

这将有助于查看您从 phpAdmin 运行的查询,以及它返回的一些示例数据。如果它们相同,则没有明显的理由它们不会返回相同的结果。 好的,所以我们有一系列 image_id 的 1、2、3、4、5、6、7、8,然后是一列命中 10、11、12、13 作为值...现在,例如,如果我要进入 php myadmin 并仅使用排序箭头并按降序排列... image_id 会像 4,1,3,2,8 一样使用最多的 DESC。没关系。但是,我现在的查询将获取 ID 的下一个最高值。换句话说,如果 Current 为 2,我想它会抓取 3、4、5...我需要它来抓取 8,因为这将是 Hits 排序的下一个 id DESCENDING,如果这有意义的话? 仍然希望看到您从 phpAdmin 运行的 SQL,您说它是“正确的”(您的 php 中有用于排序和方向的变量)。将数据样本添加到您的问题中,这将比抽象地尝试描绘正在发生的变量的情况更容易回答。 这是 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我插件。有帮助吗? 这里应该会有帮助。这些是实际的 image_ids LIMIT 5,并且这些是按命中字段降序排序的。 52791, 52801, 52781, 52771, 52581。现在如果我正在查看的当前图像的 id 为 52791,那么上一个应该什么都没有,下一个应该是 52801。我的查询正在做什么我认为给了我一个 image_id一个更高值的数字作为“下一个”,因为这是下一个最高 VALUED image_id,而不是下一行。我可以看到为什么在查询中,我要求大于...但我只需要下一行。 【参考方案1】:

我认为问题在于您的 WHERE 条件:WHERE image_id &gt;".$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 1 更改为 LIMIT 2。这样,查询基本上会返回您的最高值和具有下一个最高“命中”值的值。

我希望这会有所帮助。

【讨论】:

以上是关于Joomla中的mysql orderby中的下一个和上一个SQL语句的主要内容,如果未能解决你的问题,请参考以下文章

转到外部 Flash 动作脚本 3 中的下一帧

laravel写出文章的上一篇和下一篇并进行MySQL语句性能测试

什么用于切换到程序中的下一列

获取循环中的下一项

Ruby on Rails:获取模型中的下一项

Javascript:通用获取数组中的下一项