当我知道第二行时,从SQL表中获取下一行的最简单方法

时间:2011-08-02 12:13:26

标签: php mysql database

大家好我正在尝试编写一个排序脚本

为此,我的用户将点击一个上移按钮,该按钮会将我们想要移动的当前选择的ID发布到处理脚本的新页面。

因此,使用下面的获取函数,我得到了我们想要移动的当前行的排序ID

$sqlCurrent = "SELECT * FROM `contact` WHERE `contact_id` = $id LIMIT 0, 1 ";

$resultsCurrent= mysql_query($sqlCurrent) or die(mysql_error());

$rowC = mysql_fetch_row($resultsCurrent);

$currentSort =$rowC[9];

然后我使用

以降序排出所有数据

现在,如果我当前的排序顺序为6,我想查找排序顺序为3或4或5的行,所以我使用了降序,下一个排序列表出现在下一个表中。

$sql = "SELECT * FROM `contact` ORDER BY `contact`.`contact_sortOrder` DESC LIMIT 0, 30 ";

问题是如何使用1个或2个函数简单地从该行获取数据。

我们不能简单地寻找下一个排序顺序,因为它可能不存在。

对于这个例子,我使用了像这样的数据库

rowId 1 Sort order 6
rowId 2 Sort Order 2
rowId 3 Sort Order 4

现在我是行ID 3,想要用下一个替换它。所以我需要使用最短的方法以某种方式获取rowId 2。

任何帮助都会有用

2 个答案:

答案 0 :(得分:0)

可以像

一样简单
$query = "
  SELECT
    x,y,z
  FROM
    contact
  WHERE
    contact_sortOrder < $currentSort
  LIMIT
    1
";

(假设$ currentSort对于“直接插入”查询是安全的。请参阅http://docs.php.net/pdo.prepared-statements

答案 1 :(得分:0)

select      prev.*
from        contact as curr
left join   contact as prev on prev.contact_sortOrder < curr.contact_sortOrder
where       curr.contact_id = $id
order by    prev.contact_sortOrder desc
limit 1