SQL获取特定ID

时间:2015-08-26 14:04:47

标签: mysql

我有一个类似的查询:

    $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的查询后。

2 个答案:

答案 0 :(得分:2)

如果您只想要前后行,而不是中间行,可能是这样的?获取最低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;

答案 1 :(得分:1)

正如其他人在评论中指出的那样,您需要澄清模型的某些方面。你的pressID是独一无二的吗?每个日期只有一个pressID吗?现在,如果两个问题的答案都是肯定的,为什么不使用limit

首先,您检索“特定ID ”的日期:

SELECT date FROM press WHERE pressID = specific_id;

然后您可以轻松创建两个查询:

对于之前的那个:

SELECT * FROM press 
WHERE date <= specific_id_date** and pressID <> specific_id 
GROUP BY date 
ORDER BY date DESC 
LIMIT 1;

对于后者:

SELECT * FROM press 
WHERE date >= specific_id_date and pressID <> specific_id 
GROUP BY date 
ORDER BY date ASC 
LIMIT 1;