日期:2014-05-16  浏览次数:20545 次

mysql表多列排序,得到某个指定值的上一条或下一条,怎么做简单点
一个进销存数据库mysql,表名tblsale,有date和index两个字段来确定一个销售单(一天里面有n单,用index来区分),表里面的记录并不一定是按顺序排放,因为存在后面补加的可能。
单纯的对表里的记录进行排序,可以用order by date, index来排(视情况用升序或降序)。
现在前端传过来一个date和一个index,根据这个特定的date和index来找出它的上一单或者下一单。在PHP里,怎么做简单点呢?

------解决方案--------------------
引用:
看了回复,我觉得我前面少说了点东西。
关于上一单、下一单,我们要考虑一种极端情况,我以上一单为例说一下:
一般情况下,所谓上一单就是date不变的情况下,index-1(考虑充分一点,万一index不连贯,就取比index小一点的),但是,如果index本来就是那一天最小的呢?这时,就要考虑到date先选前一天的(如果前一天没有,则要选再前一天的。。。),然后在date固定的情况下,选index最大的一个。。。
下一单也是类似的道理。
麻烦就麻烦在这里。

其实你补充的这些,实际上已经是舍弃了index这个条件。
那你这个就得结合程序去实现了,以上一单为例如下:

$sql = "SELECT date, index FROM table WHERE date='dateVal' AND index<'indexVal' 
    ORDER BY index ASC LIMIT 1";
$result = mysql_query($sql);
$row = mysql_fetch_row($result); //这里是正常情况,既有值
if(empty($row)){ //所谓的极端情况来了。。,既上一个有单日期的最后一单
    $sql = "SELECT date, index FROM table WHERE date<'dateVal' 
        ORDER BY date,index DESC LIMIT 1";
    $result = mysql_query($sql);
    $row = mysql_fetch_row($result);
}
print_r($row);