我有一个查询,如:

    $query = "SELECT * FROM `press`"
                    ." WHERE "SOME CONDITONS
                    ." GROUP BY `pressID`"
                    ." ORDER BY `date` DESC"
                    .";";


该查询返回印刷机数组,按date排序。

我需要修改此查询,才能在特定ID之前和之后(两个查询,每个查询一个)之前仅按一次,ID字段为pressID

有任何想法吗 ?

我可以在查询后进行特定处理,但是我认为直接在查询中这样做会更好。

谢谢 !

编辑:

我的查询返回一个有序的数据数组,如:

array(XXX) {
  [0]=>
  array(XXX) {
    ["pressID"]=>     string(4) "1811"
  },
  [1]=>
  array(XXX) {
    ["pressID"]=>     string(3) "450"
  }
  ,
  [2]=>
  array(XXX) {
    ["pressID"]=>     string(1) "3"
  }
  ......
}


我需要修改此查询(或创建一个新查询),以仅获取特定ID之前的元素,而在第二个查询中,获取特定ID之后的元素。

如果我的ID = 450,则需要获取ID = 1811的查询之前的新闻,以及ID = 3的查询之后的新闻。

最佳答案

如果您只想要前后的行,而不想要中间的行,也许是这样的?获得比特定ID大的最低ID,小于最大ID的最大ID:

$query = "SELECT * FROM `press`"
                ." WHERE pressID = (SELECT MIN(pressID) FROM `press` WHERE pressID > specificID)"
                ." OR pressID = (SELECT MAX(pressID) FROM `press` WHERE pressID < specificID)"
                ." GROUP BY `date`"
                ." ORDER BY `date` DESC"
                .";";


编辑:由于您按日期订购:

SELECT * FROM press
WHERE date = (
    SELECT MIN(date) FROM press
    WHERE
        date > (SELECT date FROM press WHERE pressID = specific_id)
)
OR date = (
    SELECT MAX(date) FROM press
    WHERE
        date < (SELECT date FROM press WHERE pressID = specific_id)
)
GROUP BY date
ORDER BY date;

10-05 20:32
查看更多