Имя: Пароль:
IT
 
SQL запрос на выборку элемента и следующего за ним.
0 Coldboy
 
18.07.13
12:29
Здравствуйте. Собственно такой SQL запрос
SELECT v1,v2,v3
FROM tables
WHERE time_start <= '$tekdata'
AND time_end >= '$tekdata'
AND test = 'id'

В этом запросе я выбираю запись по данным параметрам мне нужна запись с тем же id, но следующая после данной записи. Как это можно сделать?
1 Лефмихалыч
 
18.07.13
12:32
top 2
order by
2 Coldboy
 
18.07.13
12:34
top 2 это как ? order by зачем?
3 МихаилМ
 
18.07.13
12:36
My SQL ?
4 упс
 
18.07.13
12:36
а "следующая после данной записи" - это как?
5 mikecool
 
18.07.13
12:37
(0) а ид не уникальный?
6 Ёпрст
 
18.07.13
12:38
SELECT v1,v2,v3
(select min(v1) from tables where
time_start <= '$tekdata'
AND time_end >= '$tekdata'
AND test > 'id'
)as nextv1
-- и т.д для nextv2,nextv3

FROM tables
WHERE time_start <= '$tekdata'
AND time_end >= '$tekdata'
AND test = 'id'
7 Coldboy
 
18.07.13
12:41
(4) ну в таблице идет запись, и следующая за ней.
id уникален. это грубо говоря какой-то параметр.
8 rs_trade
 
18.07.13
12:42
(7) а следующая, это как? физически на диске лежит в соседнем секторе?
9 rs_trade
 
18.07.13
12:44
следующая запись, не может быть такого критерия. следующая по времени, дате чему то еще должна быть.
10 mikecool
 
18.07.13
12:46
(7) так и выбирай - твой запрос + union тоже самое where id = id из первого запроса + 1
11 Coldboy
 
18.07.13
12:46
да My SQL.

ну смотрите идут записи
id  datatime           name   guid
1   18.07.2013 12:45   test1   12312
1   18.07.2013 13:54   test2   12313
1   18.07.2013 16:43   test3   12314

вот хочу чтобы вышло в результате первые 2 строчки. guid немного смущает, ибо может залететь другой id с guidom Допустим 12313.
12 Coldboy
 
18.07.13
12:47
(10) тоже так думал, но думал может  есть проще ) и опять же нельзя на guid упираться.
13 rs_trade
 
18.07.13
12:48
(11) select top 2 с отбором по гуиду и сортировкой по дате времени
14 Coldboy
 
18.07.13
12:49
(13) не понимаю как примерно должен выглядеть запрос.
15 rs_trade
 
18.07.13
12:52
(14)

SELECT v1,v2,v3
FROM tables
WHERE time_start <= '$tekdata'
AND time_end >= '$tekdata'
AND test = 'id'
ORDER BY datatime
LIMIT 2


на mySQL это будет LIMIT
16 Coldboy
 
18.07.13
12:54
(15) тока в такой отбор попадет 1 запись, ибо starttime и endtime не пересекающиейся промежутки. грубо говоря эхто программы передач.
17 rs_trade
 
18.07.13
12:56
(16) может вообще убрать это условие? без него в отбор попадет 2 записи с наибольшей или наименьшей датой, зависит от порядка сортировки. ну и конечно только по выбранному ид.
18 BigHarry
 
18.07.13
14:24
Я бы UNION-ом попытался бы подтянуть следующие записи, типа так:
SELECT v1,v2,v3 FROM tables  WHERE time_start <= '$tekdata'
AND time_end >= '$tekdata' AND test = 'id'
UNION SELECT v1,v2,v3 FROM tables  WHERE time_end тыры-пыры-условие.