![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Столкнулся с сортировкой 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"
и сортируй по названию