- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Все что нужно знать о DDоS-атаках грамотному менеджеру
И как реагировать на "пожар", когда неизвестно, где хранятся "огнетушители
Антон Никонов
В 2023 году Google заблокировал более 170 млн фальшивых отзывов на Картах
Это на 45% больше, чем в 2022 году
Оксана Мамчуева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Пожалуйста, помогите с запросом SELECT.
Упрощенный вариант что имеем:
TABLE: persons
id (ID человека, auto_increment)
birthdate (дата рождения)
TABLE: companies
id (ID компании, auto_increment)
inn (ИНН)
kpp (КПП)
TABLE: objects
o_id (ID объекта, auto_increment)
o_type (тип объекта, человек (persons): 1, компания (companies): 2)
o_name (название объекта)
o_data_id (ID расширенных данных объекта в другой таблице, в зависимости от типа объекта o_type)
Имеем:
objects (1, 1, 'Иванов Иван Иванович', 1);
objects (2, 2, 'ООО Ромашка', 1);
persons (1, '01.01.1970');
companies (1, '63160000, 631601001');
Одна запись в таблице objects соответствует одной записи в одной из других таблиц (в зависимости от типа объекта o_type)
Задача - получить список компаний, без использования поля o_type
Запрос сейчас:
SELECT * FROM objects o, companies c WHERE o.o_data_id = c.id
Проблема: выдает два результата вместо одного.
ЕСТЬ ЛИ РЕШЕНИЕ НА УРОВНЕ ИЗМЕНЕНИЯ ТЕКСТА ЗАПРОСА SELECT?
P.S. Такие решения, как добавить в запрос 'WHERE o_type = 2' или
добавить в таблицы persons, companies идентификатор обратной связи с объектом, например, object_id и искать через "WHERE c.object_id = o.o_id"
известны, но нежелательны.
P.S. Такие решения, как добавить в запрос 'WHERE o_type = 2'
А чем же не подходит WHERE o.o_data_id = c.id AND o.o_type = 2?
Так под логику запроса попадают две записи.
Оставить из них только одну можно лишь добавив дополнительные критерии отбора. А как же иначе?
Кажестся будет так
SELECT поля FROM objects o
LEFT JOIN companies c on c.id= o.data_id
Убрать двойные записи можно банальным group by o_data_id, но логически это ничего не дает. Чтобы получить список именно компаний, которые используются в таблице objects вы обязаны делать выборку по o_type. В любом другом случае он выдаст компании, чей id совпадает с id person в таблице object.
Так:
SELECT поля FROM objects o
LEFT JOIN companies c on c.id= o.data_id
Увы, не работает, отображает все подряд.
Вариант с добавлением o_type вполне приемлем, но потребует значительно больших трудозатрат (много кода) чем корректировка запросов SELECT.
Вариант с добавлением o_type вполне приемлем, но потребует значительно больших трудозатрат (много кода) чем корректировка запросов SELECT.
Это как? Обычно, базы данных и SQL применяются, чтобы трудозатраты сократить :)
Вы хотите сказать, что модифицировать этот запрос каким-то чудесным способом, без использования o_type, будет менее трудозатратно, чем модифицировать этот запрос, добавив o_type? )))
Вот непонятно почему нельзя использовать where o_type=2.
А так факт что этапу проектирования приложения было выделено мало времени на лицо.
Вообще странная структура данных, ну да ладно. Подумайте на тему уникального id, т.е. сквозной id. Таким образом тип объекта будет однозначно определяться его id