Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Столкнулся с сортировкой Lookup поля (( [D7, IB6.x]


AndrewVolkov ©   (2002-11-21 16:17:00) 

Доброго всем дня!!!

Есть 2 таблицы

таблица 1
People

id
name
Surname
Country_id

{-------}

таблица 2
Country

id
Nazvanie

{-------}

есть ibQuery
c текстом
select * from people
order by name

и у этого запроса добавлено Lookup Field "Country_Name"
которое по country_id вытаскивает Nazvanie из таблицы Country

Далее все данные помещаются в DBGrid, где при нажатии на заголовок окна я меняю строку в Запросе

order by <Имя поля>,

соответсвенно при нажатии на поле "Country_Name" выскочит ошибка что такого поля нет. Я могу подставить поле Country_ID, но это не совсем то, я отсортирую по ID а не по названию.
А возможно ли как-нибудь это организовать, чтобы сортировать Lookup Fields


ЮЮ   (2002-11-23 09:02:00) [1]

Но вот так:
SELECT s.id, s.name, s.surname, s.date_birth, s.date_death,
с1.nazvanie COUNTRY_BIRTH, с2.nazvanie COUNTRY_DEATH
from Sportsmen s
left join country c1 on c1.id=s.country_idb
left join country c2 on c2.id=s.country_idd

должно работать всяко быстрее, чем с подзапросом в каждой строке


Prooksius   (2002-11-22 16:11:00) [2]

Нет. Запрос будет выполняться, как если бы ты все написал одним запросом (select ... order by...)


AndrewVolkov   (2002-11-22 15:38:00) [3]

Делюсь, если кому интересно.

CREATE VIEW SPORTSMAN_VIEW(ID,NAME,SURNAME,DATE_BIRTH,DATE_DEATH,PLACE_BIRTH,PLACE_DEATH,COUNTRY_BIRTH,COUNTRY_DEATH)
AS

SELECT s.id, s.name, s.surname, s.date_birth, s.date_death,
s.place_birth, s.place_death,
( select country.nazvanie from country where country.id=sportsmen.country_idb),
(select country.nazvanie from country where country.id=sportsmen.country_idd)

FROM Sportsmen s

Встречный вопрос? Можа кто в курсе, если теперь я соответственно делаю
select * from SPORTSMAN_VIEW
order by id

это будет в 2 раза медленнее работать, или нет.
(потому что сначала типа view работает, а потом по ней еще 1 запрос)


Vagrant   (2002-11-22 01:45:00) [4]

Ну так поделись с народом находкой :-)


AndrewVolkov   (2002-11-21 21:03:00) [5]

Ура, нашел как - никогда бы не допер, что так можно


AndrewVolkov   (2002-11-21 20:25:00) [6]

Что никто не знает???


AndrewVolkov   (2002-11-21 19:03:00) [7]

to Val лукап согласен, просто как-то по умолчанию его влепил.

но дальше не совсем понял. Вот что у меня

CREATE TABLE SPORTSMEN (
ID ID NOT NULL,
NAME NAME NOT NULL,
SURNAME SURNAME NOT NULL,
DATE_BIRTH DATE,
DATE_DEATH DATE,
PLACE_BIRTH NAZVANIE ,
PLACE_DEATH NAZVANIE ,
COUNTRY_IDB INTEGER,
COUNTRY_IDD INTEGER,

FOTO BLOB SUB_TYPE 0,
MEMO BLOB SUB_TYPE 0,
CONSTRAINT SPORTSMEN_PK PRIMARY KEY (ID)
);


CREATE TABLE COUNTRY (
IDID NOT NULL,
NUMBER INTEGER NOT NULL,
NAZVANIENAZVANIE NOT NULL,
FOTO BLOB SUB_TYPE 0,
YEARU YEARTYPE ,
YEARD YEARTYPE ,
CONSTRAINT COUNTRY_PK PRIMARY KEY (ID)
);


вот из этого хочу view к примеру сделать.


Val   (2002-11-21 18:55:00) [8]

>AndrewVolkov (21.11.02 18:38)
..эта запись не выберится. А мне нужны все записи.

сделайте внешнее объединение
А еще трабла в том..
имеет место некорректное проектирование БД - избыточность данных, нужно не две записи с разными странами, а дополнительное поле с ид "страны смерти".
и то же внешнее объединение на справочник стран с разными псевдонимами.
а лукап поле тут совершенно не нужно.


AndrewVolkov   (2002-11-21 18:38:00) [9]

Я не совсем хороший пример дал.
Вся трабла в том, что Country_ID может быть Null и тогда при
where p.country_id=c.id эта запись не выберится. А мне нужны все записи.
А еще трабла в том, что у меня в таблице people 2 записи завязанные на таблицу country, типа страна рождения и страна смерти. Соответственно страны смерти может не быть, а иногда и страны рождения (нехватка данных). и запрос типа where p.country_id_birth=c.id and p.country_id_death=c.id Я получу вообще не то что надо.


Prooksius   (2002-11-21 16:58:00) [10]

Выбери в ibQuery название страны, помимо всего остального.
ibQuery.SQL := "select people.*, Country.Nazvanie from people, Country where people.Country_id = Country.id order by name"
и сортируй по названию


Наверх

Титульная страница Поиск, карта сайта Написать письмо