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 '.$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 * FROMjos_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 >".$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语句的主要内容,如果未能解决你的问题,请参考以下文章