![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сортировка записей [D7, IB5.x]
Shade © (2004-08-08 11:19:00)Знает кто нибудь как вывести записи в нужном мне порядке?, например по ID= 3,12,5... Ну короче этот список известен, и дан либо в строке, либо в массиве.
Через 'ORDER BY' никак не получается, 'IN' воспринимается как множество... Подгружать по одной записи тоже не вышло. ВЫРУЧАЙТЕ ПРОГРАММЕРЫ!!!
VID (2004-08-09 23:55:00) [1]Дык, какой же ему прямой ответ дать, если он прямого и конкретного вопроса не задал :) что за инфу...
впрочем, я всё равно ничем не смог бы помочь, я акцесс обошёл стороной.
sniknik (2004-08-09 23:40:00) [2]VID © (09.08.04 22:55) [41]
думаеш я издеваюсь? мне кажется наоборот.
вот тебе один для примера
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1092079761&n=1
дай ему прямойответ. (счастье если даш ссылку на UBPFD и он сам разберется, но боюсь этого не будет)
VID (2004-08-09 22:55:00) [3]sniknik © (09.08.04 22:12) [40]
Бывает период когда человек воспринимает только прямые ответы, он ещё не готов саморазвиваться, "видеть между строк" и тому подобное. Ему просто нужен код. Просто я сам прошёл через такой этап, и сколь сильно это бесит мастеров столь сильно это необходимо новичкам.
Лично мне в своё время в период активного изучения мною Interbase помогал один мой друг через интернет, и чаще всего методом "прямого ответа" - т.е. код давал. Это было на самом начальном этапе, и я бездумно использовал этот код говоря спасибо и развивая проект дальше.
А потом стали возникать вопросы: Почему это именно так работает, и что если.... Как правило эти вопросы возникли, когда полученный код после некоторого использования требовалось всё-таки немного модифицировать. Вот на этом этапе новичёк готов к анализу советов.
Поэтому, лично тебе, я хочу посоветовать быть не столь категоричным в этом отношении. Тем более что ты можешь и то и другое: дать совет или просто подкинуть готовое решение.
В конце-концов, ведь не зря в гостевой книге готовых решений для дельфи (UBPFD) столько благодарных отзывов.
ИМХО.
sniknik (2004-08-09 22:12:00) [4]> А sniknik © если такой умный, то чем бы приколы загонять ответ бы написал. Всяк "братьям по оружию помагать нужно"!
а ты почитай внимательнее, я ведь помогал, но ты все успешно игнорировал... а второй раз одно и то же скушно.
или только прямые ответы воспринимаеш? тебя прямо ткнуть туда где я говорил тоже самое что и VID сейчас? а до этого и другое. ну так здесь не ликбез, тебя любимого, другим развлечься тоже нужно.
- если ты такой умный чего же ты строем не ходиш?
а вот не буду. не хочу и не буду.
Shade (2004-08-09 21:44:00) [5]VID
Тебе спасибо за ответ. Сейчас попробую!
Sergey13 ©
Ты не прав, проектирование у меня нормальное. К каждому изделию прилагается свой маршрут (изготовления по цехам). И поэтому без сортировки здесь никак (не будут же деталь красить если ещё фрезеровали :))) ).
А sniknik © если такой умный, то чем бы приколы загонять ответ бы написал. Всяк "братьям по оружию помагать нужно"!
Sergey13 (2004-08-09 09:17:00) [6]2[35] Shade (08.08.04 23:36)
Вот спорят все, спорят. А зачем сортировать по несортируемому, объясни? Так можно и картинки по содержимому "сортировать". ИМХО, у тебя проблемы в проектировании структуры.
VID (2004-08-09 01:37:00) [7]>>Короче при таком объединении запросов 'ORDER BY' вообще не воспринимается.
>>Что хоть примерно можно в этом случае поделать???
в Order by указывай не имена полей а их порядковые номера в результирующем запросе.
короче.
в твоём случае всё что ты хочешь должно выглядеть так:
for ord := 1 to n do
begin
Query.SQL.Add( 'SELECT TABLE1.DATA, TABLE2.DATA, TABLE2.ID' );
Query.SQL.Add( 'FROM TABLE1, TABLE2' );
Query.SQL.Add( 'WHERE TREE .ID=' + IntToStr( mas[ord] ) + ' AND TABLE1.ID=TABLE2.ID_ITEM' );
if ord < n then Query.SQL.Add( 'UNION ALL' );
end;
Query.SQL.Add('ORDER BY 3');
sniknik (2004-08-08 23:50:00) [8]правильно, это самая умная мысль во всем топике. (о принятии программиста на работу)
а теперь по вопросу:
а есть ли вопрос? чемулибо ничто не поможет если чтонибудь замутить. запомни, это аксиома.
ты кстати похоже путаеш, место обшения программистов и сайт бесплатных репетиторов для переучивающихся бухгалтеров... от этого все твои проблемы с непониманием.
Shade (2004-08-08 23:36:00) [9]sniknik ©, Молодец очень умно. Может вообще тогда форум весь закрыть нафиг и вместо него объявы программеров вывесить?
Теперь по вопросу:
Может как нибудь вложенный запрос на внутреннюю таблицу замутить?
sniknik (2004-08-08 23:31:00) [10]подумайте там всетаки над первым ответом, это был отличный совет. (и вам хорошо и на одного безработного программиста меньше будет)
sniknik (2004-08-08 23:28:00) [11]можно почитать книги, можно хелп, на крайняк перечитать свой же топик, ответ уже был.
Shade (2004-08-08 23:23:00) [12]Блин мужики ВЫ ВООБЩЕ КРУТЫЕ. Я дней пять клавиатупу на этом грыз. Но тут ещё проблема есть небольшая
Всё конечно хорошо, и прекрасно работает а именно:
for ord := 1 to n do begin
Query.SQL.Add( 'SELECT ' + IntToStr( ord ) + ' AS ord,' );
Query.SQL.Add( 'TABLE1.DATA,' );
Query.SQL.Add( 'TABLE2.DATA' );
Query.SQL.Add( 'FROM TABLE1, TABLE2 ' );
Query.SQL.Add( 'WHERE TREE.ID=' + IntToStr( mas[ord] ) + ' AND TABLE1.ID=TABLE2.ID_ITEM' );
Query.SQL.Add( 'UNION' );
end;
Query.SQL.Delete( Query.SQL.Count - 1 );
Но дело в том, что у TABLE2 есть свой ID и вторая таблица
(пририсовываясь к первой) выводится чёрт знает в каком порядке. :(
А если в конце приписать строчки типа:
Query.SQL.Add('ORDER BY ord, TABLE2.ID');
или просто:
Query.SQL.Add('ORDER BY TABLE2.ID');
То выводится ошибка:
'
Dynamic SQL Error
SQL error code = -104
Invalid command
invalid ORDER BY clause.
'
Короче при таком объединении запросов 'ORDER BY' вообще не воспринимается.
Что хоть примерно можно в этом случае поделать???
VID (2004-08-08 21:36:00) [13]Shade (08.08.04 21:03) [29]
Я надеюсь ты просёк, что сам текст запроса надо формировать автоматически ? ;)
сергей1 (2004-08-08 21:10:00) [14]ну почему два, хоть 100, в данном случае столько, сколько там у тебя строк
Shade (2004-08-08 21:03:00) [15]Не знал, что в запросе можно два раза select использовать. Сейчас попробую. А так спасибо всем кто ответил :))) КРУТЫЕ ПРОГРАММЕРЫ!!!
сергей1 (2004-08-08 20:56:00) [16]эх, был бы этот стандарт под рукой, но ничего, куплю нормальный справочник, часть проблем надеюсь уйдет
Johnmen (2004-08-08 20:53:00) [17]>VID ©
>сергей1
Кстати, поведение UNION с предикатом ALL или без оного достаточно понятно описано в стандарте SQL.
"Ищущий да обрящет" (c)
(08.08.04 15:03) [8]
сергей1 (2004-08-08 18:31:00) [18]да... век живи век учись !
а в по хелпу об этом и не догадаться
VID (2004-08-08 18:27:00) [19]сергей1 (08.08.04 18:21) [24]
На твой вопрос кажется я смогу ответить, хотя я уже вовсю сомневаюсь в своей компетентности....
Когда отсутствует опция ALL сервер проводит исключение ДУБЛИРУЮЩИХСЯ записей, а ему это легче сделать если предваритально осортировать весь набор строк. Поэтому остуствие ALL явно исключает дублирование, а неявно ещё и сортирует набор данных.
сергей1 (2004-08-08 18:21:00) [20]получается что я нихрена не знаю union, но пусть мне кто-нибудь обьяснит, почему запрос у sniknik возращает правильный результат, ведь добавив all, мы всего-то должны были получить все записи, какое это имеет отношение к сортировке, ведь этот запрос и в самом деле все отсортировал правильно