[英]mysql within Joomla next and previous SQL statement within orderby
我知道事情是错误地转义的,但是我正在尝试编写上一个/下一个查询以获取订单中的下一个id和前一个id,但是我的输出与phpmyadmin排序不匹配,它应该。 我只是写了'next',并且会用反向条件写出前一个。 这个查询似乎给了我订单中下一个最高的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'字段和my子句中的'desc'($ direction)。 这很好。 image_ids和点击不是特别的......只是数字。 订购点击时,会调整image_ids以进行匹配。 对于字段中的内容,我不需要image_id的下一个值。 根据当前的image_id I插件,无论值如何,我都需要下一行或上一行。
这些是实际的image_ids LIMIT 5,它们由命中字段Descending排序:
52791
52801
52781
52771
52581`
现在,如果我正在查看的当前图像的id为52791
,那么之前应该没有任何内容,接下来应该是52801
。 我的查询正在做什么我认为给我一个更高值的image_id为'next',因为那是下一个最高的VALUED image_id,而不是下一行。 我可以在查询中看到为什么我要求的不仅仅是......但我只需要下一行
我认为问题在于您的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
。 这样,查询基本上返回您的最高值和具有下一个最高“命中”值的那个。
我希望这有帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.