Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.12.12;
Скачать: CL | DM;

Вниз

Столкнулся с сортировкой Lookup поля ((   Найти похожие ветки 

 
AndrewVolkov   (2002-11-21 16:17) [0]

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

Есть 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


 
Prooksius ©   (2002-11-21 16:58) [1]

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


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

Я не совсем хороший пример дал.
Вся трабла в том, что 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 Я получу вообще не то что надо.


 
Val ©   (2002-11-21 18:55) [3]

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

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


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

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 (
ID ID NOT NULL,
NUMBER INTEGER NOT NULL,
NAZVANIE NAZVANIE NOT NULL,
FOTO BLOB SUB_TYPE 0,
YEARU YEARTYPE ,
YEARD YEARTYPE ,
CONSTRAINT COUNTRY_PK PRIMARY KEY (ID)
);


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


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

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


 
AndrewVolkov   (2002-11-21 21:03) [6]

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


 
Vagrant ©   (2002-11-22 01:45) [7]

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


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

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

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 запрос)


 
Prooksius ©   (2002-11-22 16:11) [9]

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


 
ЮЮ ©   (2002-11-23 09:02) [10]

Но вот так:
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

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



Страницы: 1 вся ветка

Текущий архив: 2002.12.12;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.019 c
14-36416
Lamer86
2002-11-22 18:01
2002.12.12
Я возмущён такой несправедливостью


4-36491
Grizli
2002-10-25 09:08
2002.12.12
Перевод фокуса


6-36321
nickolayLI
2002-10-16 20:52
2002.12.12
10055


1-36090
IronHawk
2002-12-01 02:52
2002.12.12
Запуск ЕХЕ-шника с параметром?


1-36281
^Sanya
2002-11-30 23:03
2002.12.12
Проблема с моим компонентом...