|
|
|
Структура таблиц фильтра по странам для показа связки компания-продукт
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Подскажите кто сталкивался. Необходимо спроектировать фильтрацию показа продуктов/компаний по странам. Показывать компанию и/или продукт только для посетителей из выбранных в фильтре стран. Или показывать всем, если записей нет. Т.е. если в фильтре есть запись о компании или продукте компании, то надо показывать эту сущность только в той стране(странах), которая указана в фильтре. Если записей нет, то показывать везде. (ниже поясню подробнее) Исходные данные: Сайт-каталог показывает продукцию компаний. страница списки компаний, страница списки продуктов, страница компании, страница продукта. Есть таблица компании (companies id, name, ....) Есть таблица продуктов компаний (products - поле id,company_id, .... ) Есть страны (countries id, iso, name,...) Продуктов планируется около 100 000, компаний около 10 000, страны - (это понятно) около 300. Пример: Если компания (пускай будет Test_CORP ) есть в фильтре (например: только для Гондураса геокод id=340) - то ссылку на страницу этой компании и ссылки на страницы продуктов этой компании надо показывать только для посетителей сайта из Гондураса. Если есть только продукт (TEST_PRODUCT) этой компании в фильтре (усложним: только для Гондураса или Никарагуа) - то ссылку на страницу компании Test_CORP и другие продукты этой компании показывать всем, а ссылку на продукт TEST_PRODUCT показывать только для посетителей из Гондураса или из Никарагуа. Я додумался до двух вариантов таблицы фильтра: 1 Вариант - одна таблица Код: sql 1. item_id: это product_id или company_id в зависимости от item_type item_type: 1- продукт, 2 - компания Сюда впихивается и компания и продукт и делается SQL: с 2-мя LEFT JOIN (один для продуктов, один для компаний), если надо показать продукт с 1 LEFT JOIN (только для компаний), если показать компанию Например: * Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. * тут я не уверен, что правильно будет выбирать (хотя всегда можно заколхозить GROUP BY :) ) Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 2 Вариант: 2 таблицы: Код: sql 1. Код: sql 1. Тоже по LEFT JOIN для обоих таблиц, если показать продукт. Или 1 LEFT JOIN для таблицы компаний, если показать компанию. Например: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. И соответственно всю эту логику надо будет реализовать в SQL запросах. Я примерно представляю как это сделать, но не могу оценить масштабы трагедии по 2-м вариантам (читай сложности в составлении SQL запросов). Для компаний более-менее ясно как выбирать логику. А для продукта надо смотреть, чтобы не только продукта не было в фильтре, но и компании, которой принадлежит продукт тоже не было в фильтре. Плюс к этому если будет 2 таблицы фильтра, то тогда можно будет добавить для products_only_in_country внешние индекс для продукта (UPDATE, DELETE CASCADE) Может кто уже сталкивался с такой задачей и подскажет: какой вариант лучше по скорости выполнения и мороки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2015, 14:48:59 |
|
||
|
|

start [/forum/topic.php?fid=47&gotonew=1&tid=1832944]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
43ms |
get topic data: |
13ms |
get first new msg: |
7ms |
get forum data: |
3ms |
get page messages: |
37ms |
get tp. blocked users: |
1ms |
| others: | 191ms |
| total: | 325ms |

| 0 / 0 |
