Помогите со структурой таблицы

vitek_gagra

Создатель
Регистрация
7 Янв 2009
Сообщения
47
Реакции
12
Здравствуйте уважаемые форумчане.

На сайте доски объявлений решил сделать, что бы пользователи могли добавить понравившееся объявление в избранное (блокнот) на каком сайте как называется :)
Подскажите какую лучше структуру у таблицы сделать.

Объявления находятся в разных таблицах
Авто объявления - a_messages
Авто запчасти - spare_parts
Остальные объявления - messages
У каждого объявления есть свой айди.

Хочу сделать таблицу favorites и в нее записывать айди объявления, айди пользователя.
Какую лучше сделать структуру таблицы просто айди объявления, айди пользователя или еще название объявления?
Просто хотелось что бы не сильно нагружало движок, а то он и так нагруженный.

И еще такой вопрос, что бы не создавать отдельную тему, спрошу здесь.
Последние комментарии объявлений.
Комментарии объявлений находятся тоже в разных таблицах.
К авто объявлениям auto_comments и остальные объявления obj_comments
Щас вывожу вот так
Код:
while ($b = query_rw ("SELECT a.`cid`, a.`hid`, a.`usr_login`, a.`usr_mess`, c.`marka_id` AS `mess_id`, c.`full_name` AS `full_name` FROM `auto_comments` AS a LEFT JOIN `a_messages` AS c ON (c.`mess_id` = a.`hid`) WHERE a.`active` = 1 ORDER BY a.`add_date` DESC LIMIT 3")) {
        $w = DIR_ROOT.'img/'.$b['usr_login'].'.jpg';
        $w2 = DIR_ROOT.'img/'.$b['usr_login'].'.gif';
        if (file_exists ($w2)) $f = 'http://'.SITE_HOST.'/img/'.$b['usr_login'].'.gif'; elseif (file_exists ($w)) $f = 'http://'.SITE_HOST.'/img/'.$b['usr_login'].'.jpg'; else $f = 'http://'.SITE_HOST.'/images/v2/default.png';
        
        $a[] = array (
            'id' => $b['cid'],
            'name' => $b['full_name'],
            'url' => 'http://'.SITE_HOST.'/transport/uniq/'.$b['hid'].'/',
            'user' => $b['usr_login'],
            'user_url' => 'http://'.SITE_HOST.'/user/'.$b['usr_login'].'/',
            'text' => $b['usr_mess'],
            'avatar' => $f
        );
    }
и потом так же к остальным объявлениям.
Вопрос такой, как сделать что бы они вместе выводились
 
по любому если будешь добавлять отдельную таблицу где будут храниться id из разных таблиц и id пользователя тебе еще нужно добавить какой-нибудь селектор по сущности (по типу) чтобы не было пересечений (к примеру добавится запись с id из таблицы a_messages, а в таблице spare_parts, например, уже будет такой же id и при выборке/проверке будет и то и то объявление в избранном)
на счет добавления названия в избранное - это смотря какой функционал будет, к примеру если будет поиск по избранному - то в качестве оптимизации можно что-то дополнительно хранить, а так думаю не стоит чересчур усложнять (т.к. после изменения названия объявления надо будет менять и название в избранном)
 
по любому если будешь добавлять отдельную таблицу где будут храниться id из разных таблиц и id пользователя тебе еще нужно добавить какой-нибудь селектор по сущности (по типу) чтобы не было пересечений (у примеру добавиться запись с id из таблицы a_messages, а в таблице spare_parts к примеру уже будет такой же id и при выборке/проверке будет и то и то объявление в избранном)
на счет добавления названия в избранное - это смотря какой функционал будет, к примеру если будет поиск по избранному - то в качестве оптимизации можно что-то дополнительно хранить, а так думаю не стоит чересчур усложнять (т.к. к примеру после изменения названия объявления надо будет менять и название в избранном)
Да, вообще то на счет переименования ты прав. На странице избранных объявлений будет показываться название и оно же ссылка на объявление, без всяких наворотов типо сравнений объявлений и всякого такого, возможно потом будет, но сейчас простое надо.
Я просто подумал если потом брать название по айди из таблицы с объявлениями, не будет нагружать лишним запросом?!
Тогда получается надо структуру делать айди объявления, тип объявления, айди пользователя
Это будет более оптимальный вариант или есть еще какие то предложения?
 
нет, запросы по id (а id - это получается первичный индекс в таблице) нагружать сильно не будут, мне кажется это самый оптимальный метод решения (+ еще конечно проиндексировать поля в этой таблице)

на счет второго вопроса, как объединить получение комментариев - используй union для этого (т.е. несколько запросов объединенных через union)

ну что-то вроде
Код:
(SELECT [fields] FROM `auto_comments` [...]) union (SELECT [fields] FROM `obj_comments` [...])
это получит все комментарии одним списком из обеих таблиц
только надо чтобы поля [fields], их названия и соответственно обе выборки были одинаковы, т.е. если будет если они по-разному называются надо приводить к одному названию через alias - [field] as [fieldname]

или имелось в виду получить одним запросом и записи и комментарии к ним? если да - то так в принципе можно через join, но так лучше не делать, а получать отдельно комментарии и отдельно объявления (чтобы не нагружать сервер)
 
А есть ли смысл делить талицы? Может лучше одна - просто поле "Тип объявления" вставить и индекс по нему тоже? А дележ начинать уж по другим признакам - актуальность там, или архивные - и выносить их в другую таблицу(цы) - там [messages_arch2011]?

Кстати- такой расклад и второй вопрос хорошо решает - вывод вместе, поиск и тд.
 
Назад
Сверху