IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

 
 Ответить  Открыть новую тему 
> поиск через SQL наоборот
Rian
сообщение 13.10.2007 0:14
Сообщение #1


Знаток
****

Группа: Пользователи
Сообщений: 394
Пол: Мужской

Репутация: -  9  +


Доброй ночи, хочу написать телефонный справочник.
Есть две таблицы: одна главная, другая подчинённая со связью «один ко многим», т.е. у каждого человека может быть несколько номеров телефонов.
Найти человека, а потом по связи увидеть его телефоны не проблема и без SQL.
А как найти человека по телефону? (используя SQL).
Может выбрать телефоны, а потом сравнить ключи в полученном запросе и главной таблице? Описать такую выборку чисто на делфях могу, а на SQL неа.


--------------------
Objective-C, Unity3d
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Гость
сообщение 13.10.2007 0:44
Сообщение #2


Гость






SQL
SELECT TableUser.Name
FROM TableUser INNER JOIN TablePhone ON TableUser.ID = TablePhone.UserID
WHERE (((TablePhone.Phone)=[Phone Number here]));
выдаст тебе имя по номеру телефона.
 К началу страницы 
+ Ответить 
Rian
сообщение 13.10.2007 0:53
Сообщение #3


Знаток
****

Группа: Пользователи
Сообщений: 394
Пол: Мужской

Репутация: -  9  +


Попробую. Где-то я уже видел похожее. Если можно пару коментариев.


--------------------
Objective-C, Unity3d
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 13.10.2007 1:54
Сообщение #4


Гость






А что непонятно? (пост выше - мой, авторизация не срабатывала)

Выбирается значение Name из TableUser, при этом рассматриваются только те записи таблицы TableUser, для поля TableUser.ID которой существует соответствующее поле TablePhone.UserID (об этом позаботится INNER JOIN). Ну, и кроме того, что эти поля должны совпадать, еще и соответствующее поле TablePhone.Phone должно совпадать с заданным для поиска номером (это уже забота WHERE)...

В результате получаем имя хозяина заданного телефона.
 К началу страницы 
+ Ответить 
Rian
сообщение 13.10.2007 7:18
Сообщение #5


Знаток
****

Группа: Пользователи
Сообщений: 394
Пол: Мужской

Репутация: -  9  +


спасибо за комент. просто я только вчера SQL-лом занялся и для меня оно ещё выглядит немножко как абракадабра


--------------------
Objective-C, Unity3d
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Rian
сообщение 14.10.2007 7:39
Сообщение #6


Знаток
****

Группа: Пользователи
Сообщений: 394
Пол: Мужской

Репутация: -  9  +


volvo, я ведь правильно написал запрос?
Но когда пытаюсь его выполнить выбивает ошибку, что поля key не существует.
<
procedure TForm1.find_bClick(Sender: TObject);
const j=chr(39);
begin
DataModule1.FindQuery.Active:=false;
DataModule1.FindQuery.SQL.Clear;

DataModule1.FindQuery.SQL.Add('SELECT*');
DataModule1.FindQuery.SQL.Add('FROM Справочник INNER JOIN Телефоны ON Справочник.key=Телефоны.linkkey');
DataModule1.FindQuery.SQL.Add('WHERE (телефоны.телефон)=(' +j+ FindTelephoneEdit.Text +j+ ')');

DataModule1.FindQuery.Active:=true;
FindResultForm.ShowModal;
end;
>


--------------------
Objective-C, Unity3d
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 14.10.2007 9:56
Сообщение #7


Гость






Не знаю, у меня вот такой запрос (на моей базе)
  ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT TableUser.Name');
ADOQuery1.SQL.Add('FROM TableUser INNER JOIN TablePhone ON TableUser.ID = TablePhone.UserID');
ADOQuery1.SQL.Add('WHERE (((TablePhone.Phone)='+'''' + Edit2.Text + ''''+'));');

ADOQuery1.Active := True;

отработал прекрасно...
 К началу страницы 
+ Ответить 
Rian
сообщение 20.10.2007 15:37
Сообщение #8


Знаток
****

Группа: Пользователи
Сообщений: 394
Пол: Мужской

Репутация: -  9  +


всё равно не хочет. как-нибуть попробую с новой базой. может не понимает русские названия таблиц или в своей базе напихал чёрти чего так, что оно глючит.


--------------------
Objective-C, Unity3d
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 29.04.2024 11:24
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"