- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Зачем быть уникальным в мире, где все можно скопировать
Почему так важна уникальность текста и как она влияет на SEO
Ingate Organic
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
приветствую всех
есть сайт, на котором присутствуют различные сущности, такие как, например, товары, новости, статьи.
для каждого товара, новости, статьи имеется возможность оставить комментарий. Комментарии хранятся в единой таблице, принадлежность к сущности отражается в 2х полях, тип сущности и ID сущности.
Задача состоит в том чтобы вывести, к примеру, 10 последних комментариев с указанием названия сущности. Join мы не можем использовать по понятным причинам. Делать отдельный запрос на получение названия новости/статьи/товара для каждого комментария - не вариант.
Есть вариант использвать mysql view, то есть 1 раз создать представление (с использованием UNION) в котором хранились бы все комментарии с уже присоединенными доп. данными и делать выборку оттуда. Но что-то этот вариант мне не очень симпатичен.
Один из самых разумных вариантов - это JOIN с условием и привязкой к типу. То есть нужно указать в условии, что если тип такой-то, то нужно с такой-то таблицей объединять и получать такие-то поля.
Еще один вариант - это денормализировать немного базу и хранить название сущности в таблице с комментариями. Это существенно упростит задачу, но придется немного поправить механизм редактирования самой сущности, добавить туда изменение имени в таблице с комментариями.
Один из самых разумных вариантов - это JOIN с условием и привязкой к типу. То есть нужно указать в условии, что если тип такой-то, то нужно с такой-то таблицей объединять и получать такие-то поля.
что-то я не представляю как такой запрос будет выглядеть. можете написать пример?
Еще один вариант - это денормализировать немного базу и хранить название сущности в таблице с комментариями. Это существенно упростит задачу, но придется немного поправить механизм редактирования самой сущности, добавить туда изменение имени в таблице с комментариями.
в теории такой вариант возможен, но на практике это нереально
Если нужно максимальное быстродействие - все нужные данные в одну таблицу. Если нужна максимальная гибкость (чтоб потом если что какую доп фичу добавить минимальным программированием) - то несколько запросов. Сначала один берет выборку а потом несколько других подгружают данные к этой выборке.
Я лично сделал бы второй вариант. Не будет там проблем с быстродействием если на страницу надо взять 20-30 записей а не 10000.
что-то я не представляю как такой запрос будет выглядеть. можете написать пример?
Вот примерно ваш случай: http://stackoverflow.com/questions/1255492/conditional-join-in-mysql
Более подробно об условиях в JOIN - http://www.mysqldiary.com/conditional-joins-in-mysql/
в теории такой вариант возможен, но на практике это нереально
Это, к слову, самый производительный вариант. Второй вариант - это программно организовывать выборку нужных имен из базы данных по ID. Если правильно к вопросу подойти, то количество дополнительных запросов будет равно количеству используемых типов. Дополнительные запросы будут выполняться быстро, поскольку выборка там по ID, который часто PK.
Join мы не можем использовать по понятным причинам.
Нам ваши понятные причины пока не очень понятны. JOIN'инть к чему? В чем проблемы одним запросом дернуть нужное количество коментариев для текущей сущности? Структуру бд запилите, на словах здесь не возможно понять что у вас там.
TiA, спасибо, conditional join - то что надо.