我有一个查询,如:
$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;