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


mysql within Joomla next and previous SQL statement within orderby

我知道东西的转义不正确,但我正在尝试编写上一个/下一个查询,以获取订单中的下一个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)。这很好。图片ID和点击量并不特别。。。只是数字。当对命中进行排序时,会重新吸收image_id以进行匹配。关于字段中的内容,我不需要image_id的下一个值。我需要基于当前image_id I插件的下一行或上一行,无论值如何。

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

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。这样,查询基本上返回您的最高值和"命中"值次高的值。

我希望这能有所帮助。