Создание системы поиска по номеру телефона - MySQL
Формулировка задачи:
Уважаемые! Может кто подскажет?
Есть две таблицы:
1) sotrudniki(id(primary key), surname, name, otchestvo)
2) rooms(id(primary key), name)
Цель: создать поиск по номеру телефона сотрудников и кабинетов в справочнике, в котором будут
номера телефонов сотрудников и кабинетов(лаборатория, приемная, склад и т.д)
Для этого, я думаю, нужно создать 3-ю таблицу(phones), в которой будут номера
телефонов сотрудников и кабинетов. Только вот не знаю, как связать таблицу телефонов(phones) с таблицами sotrudniki и rooms? Если делать внешний ключ в таблице телефонов,
то его можно привязать только к одной таблице
Решение задачи: «Создание системы поиска по номеру телефона»
textual
Листинг программы
SELECT CASE p.typetable WHEN 'st' THEN s.surname WHEN 'rm' THEN r.name ELSE 'Не найден' END FROM phones p LEFT JOIN sotrudniki s ON p.id_abonent=s.id LEFT JOIN rooms r ON p.id_abonent=r.id WHERE p.Phone='88-85-86'
Объяснение кода листинга программы
В данном коде производится выборка данных из нескольких таблиц по номеру телефона.
- В первой строке кода
SELECT CASE p.typetableпроисходит выборка данных из таблицыphonesпо полюtypetable, которое содержит информацию о типе номера телефона. - Далее, с помощью оператора
WHENпроисходит проверка значения поляtypetable. Если значение равно 'st', то выбирается фамилия из таблицыsotrudnikiпо полюsurname. Если значение равно 'rm', то выбирается имя из таблицыroomsпо полюname. Если значение не соответствует ни одному из этих вариантов, то возвращается строка 'Не найден'. - В последней строке кода
FROM phones pпроисходит выборка данных из таблицыphonesпо полюid_abonent, которое является идентификатором абонента. - С помощью оператора
LEFT JOINпроисходит объединение таблицsotrudnikiиroomsпо полюid_abonent. - В строке
WHERE p.Phone='88-85-86'происходит фильтрация данных по номеру телефона, указанному в коде.