Форум: "Начинающим";
Текущий архив: 2008.10.26;
Скачать: [xml.tar.bz2];
ВнизВложенный запрос Найти похожие ветки
← →
Alex86 (2008-09-19 12:21) [0]Помогите объединить в один запрос тк не сильно знаком с sql:
SQL.Text := "SELECT MIN(ITEM_ID) FROM CONTENT WHERE (FLAGS <> 1) AND (GROUP_ID <> 0)";
Open;
LastItem := Fields[0].AsInteger;
SQL.Text := Format("SELECT MAX(ITEM_ID) CONTENT ITEM WHERE (FLAGS <> 1) AND (GROUP_ID <> 0) AND (ITEM_ID < %d) AND (ITEM_ID >= %d)",
[CurItemByKey, LastItem]);
Open;
← →
Palladin © (2008-09-19 12:25) [1]и какая великая цель сего действия будет?
← →
Alex86 (2008-09-19 12:27) [2]Next по определенным записям в таблице
← →
Palladin © (2008-09-19 12:29) [3]у тебя агрегирующая функция в запросе и нет группировки
возвращатся будет всегда одна запись
ты словами опиши что ты на выходе получить хочешь, с примером
← →
Alex86 (2008-09-19 12:39) [4]Необходимо организовать перемещение по определленным записям в таблице (например записям с полем flags = 1 и полем group_id = 0). Метод должен возвращаться id записи на которую переместились. Если запись была последняя и мы вызвали методо должен возвратиться 0.
Вообщемто вот весь код метода:
function Next: Integer;
var
LastItem: Integer;
begin
Result := -1;
with cmp_Query_ do
try
cmp_DataBase.StartTransaction;
try
SQL.Text := "SELECT MAX(ITEM_ID) FROM ITEM WHERE (FLAGS <> 1) AND (GROUP_ID <> 0)";
Open;
LastItem := Fields[0].AsInteger;
SQL.Text := Format("SELECT MIN(ITEM_ID) FROM ITEM WHERE (FLAGS <> 1) AND (GROUP_ID <> 0) AND (ITEM_ID > %d) AND (ITEM_ID <= %d)",
[CurItemByKey, LastItem]);
Open;
if Fields[0].AsInteger > CurItemByKey then
Result := Fields[0].AsInteger
else
Result := 0;
if Result > 0 then
CurItemByKey := Result;
except
cmp_DataBase.Rollback;
end;
cmp_DataBase.Commit;
except
on E: Exception do
raise;
end
end;
← →
Sergey13 © (2008-09-19 13:01) [5]> [4] Alex86 (19.09.08 12:39)
> Необходимо организовать перемещение по определленным записям
> в таблице
Перемещаться можно по набору данных (он же датасет). По таблице перемещаться невозможно в принципе. У датасета есть свои методы для перемещения - Next, Prior, First, Last. По достижении конца датасета истинными становятся свойства датасета EOF и BOF.
Велосипед изобретаем что ли?
← →
Johnmen © (2008-09-19 13:01) [6]Перемещаться можно только по определленным записям в наборе данных. Который получен запросом недавно. А на текущий момент значения min/max в таблице уже м.б. другими.
А во-вторых, кури Eof и Bof.
← →
ЮЮ © (2008-09-19 13:05) [7]> Вообщемто вот весь код метода:
а код метода CurItemByKey?
И вообще зачем это?
> Необходимо организовать перемещение по определленным записям
> в таблице (например записям с полем flags = 1 и полем group_id
> = 0).
Выбрать нужные записи, а у любого DataSet-a есть свой Nехт.
← →
Alex86 (2008-09-19 13:25) [8]А если записей в таблице 500 000 и каждые 10 секунд могут изменяться другими пользователями, не делать же каждый раз выборку нужных записей (так как под условие выборки может подпадать и 200 000 и 300 000 тыс записей таблице).
← →
Johnmen © (2008-09-19 13:28) [9]
> не делать же каждый раз выборку нужных записей (так как
> под условие выборки может подпадать и 200 000 и 300 000
> тыс записей таблице).
И зачем вдруг может понадабиться 200 000 записей сразу?
← →
Sergey13 © (2008-09-19 13:34) [10]> [9] Johnmen © (19.09.08 13:28)
> И зачем вдруг может понадабиться 200 000 записей сразу?
Проверить, а вдруг там уже 200 001. Вот и надо свом методом до нее досчитать.
← →
Alex86 (2008-09-19 13:35) [11]Вообщем есть таблица бд в которой содержаться товары у которых group_id = 1, и разделы у которых group_id = 0 (бд делал не я так что приходится работать с такой какая есть). Всего записей порядка 500 000. Так вот нужно сделать функцию которая позволила бы перемещаться только по товарам и в качестве результата возвращала id текущего товара.
← →
Johnmen © (2008-09-19 13:38) [12]
> функцию которая позволила бы перемещаться только по товарам
Какова конечная цель "перемещения"?
← →
Alex86 (2008-09-19 13:43) [13]перемещение будет определять товар с которым впоследствии будем работать (+ для работы с товарами реализован ряд методов).
← →
Johnmen © (2008-09-19 13:53) [14]Как это перемещение может что-то определять???
← →
Sergey13 © (2008-09-19 14:09) [15]> [11] Alex86 (19.09.08 13:35)
Т.е. полмиллиона записей классифицирутся только флагом группа/раздел?
Разделов, я полагаю, немного, штук 100-200. и 499800 товаров. И по ним по всем перемещаться?
Шикарно! 8-)
← →
Johnmen © (2008-09-19 14:23) [16]
> Sergey13 © (19.09.08 14:09) [15]
> Шикарно! 8-)
Щикарно (с) ЮП
← →
ANB (2008-09-19 15:24) [17]Извращение, конечно, так работать со справочником. Нормально - отобрать по условию нужный, ограниченный набор данных, и работать с набором данных на локале.
Хотя иногда вылезает необходимость ходить туда - сюда по большой таблице.
Но это надо писать свой навигатор.
В таблице обязательно должно быть поле ID. Сортировка при навигации будет тогда только по нему. Или надо будет изобретать хитрый ключ для сортировки.
А дальше все просто - храним на локале ID начала и конца окна и вовремя выполняем запросы для его перемещения.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.10.26;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.006 c