X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

2 страниц V   1 2 >
Открыть тему
Тема закрыта
> Подскажите с архитектурой базы данных и запросом
Лёлик2
Лёлик2
Topic Starter сообщение 30.12.2010, 2:43; Ответить: Лёлик2
Сообщение #1


Задача такая, есть база данных филиалов магазина и перечень товаров, представленных в них, например:
Филиал №1 - Телевизоры, Ноутбуки
Филиал №2 - СВ-печи, Ноутбуки
Филиал №3 - ЖК-Телевизоры, Ноутбуки

Пользователь задает:
"телевизоры" должен быть ответ №1 и №3
"жк-телевизоры" должен быть ответ №3
"жк-телевизоры ИЛИ св-печи" должен быть ответ №2 и 3

Я придумал как такую задачу решить, мне нужны советы по оптимизации этого решения, так как филиалов много и в некоторых список товаров до 100 наименований - не хочется сильно хостинг грузить, поэтому и прошу дать рекомендации по минимально ресурсо-затратному решению.

Мое решение такое: база из двух полей: первое - номер филиала, второе (tovari) - текстовое, в котором товары перечислены через запятую
Запрос строить так $sql="select * form my_db where (locate(lower('$nazvanie_tovara'),lower(tovari))>0)";
Поскольку я не знаю сколько будет товаров в запросе объединенных через ИЛИ, я этот запрос select хочу пустить в цикле for, т.е. отдельный запрос для каждого товара, а потом результаты всех запросов соединять в кучу. Может можно как-то одним запросом организовать? - подозреваю что так будет быстрее.
В общем у кого какие мысли, буду рад выслушать!
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
alexdrob
alexdrob
сообщение 30.12.2010, 3:42; Ответить: alexdrob
Сообщение #2


ну например одна таблица список филиалов, вторая товары, третья id филиала - id товара

filial
id - name
1 - Филиал №1
2 - Филиал №2
3 - Филиал №3

tovar
id - name
1 - Телевизоры
2 - Ноутбуки
3 - СВ-печи
4 - ЖК-Телевизоры

svyaz
f_id - t_id
1 - 1
1 - 2
2 - 3
2 - 2
3 - 4
3 - 2

то что ищите разбиваете на слова, составляете через вертикальную черту |
select distinct f.name as f_name from svyaz, filial as f, tovar as t where f_id=f.id and t_id=t.id and t.name REGEXP 'жк-телевизоры|св-печи'
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Лёлик2
Лёлик2
Topic Starter сообщение 30.12.2010, 19:02; Ответить: Лёлик2
Сообщение #3


Фух, целый день читал книжку чтобы догнать суть вашего запроса - катастрофическая нехватка знаний!
Но мне кажется этот sql-запрос не выдаст на запрос пользователя "телевизоры" результат "филиал №1 и №3", а выдаст только №1, а №3 не будет получен так как там вначале слова телевизор есть приставка ЖК-. Хотя ЖК-телевизор это тоже телевизор! Я думаю нужно именно искать функцией поиска на вхождение искомой подстроки в строку перечня товаров. Вот только какой функцией? Я нашел locate, LIKE и с помощью регулярных выражений тоже можно маски поиска создавать. На чем бы вы мне посоветовали остановится?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
alexdrob
alexdrob
сообщение 30.12.2010, 19:07; Ответить: alexdrob
Сообщение #4


(Лёлик2 @ 30.12.2010, 21:02) *
и с помощью регулярных выражений

а REGEXP по вашему что?)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
zidan
zidan
сообщение 30.12.2010, 19:27; Ответить: zidan
Сообщение #5


мне кажется этот sql-запрос не выдаст...
Нужно просто проверять код на работоспособность, а не строить догадки. Причём в базу лучше всего добавить каких-нибудь потенциально проблемных записей, вроде "телевизор/dvd-проигрыватель" или "яйцерезкотелевизор".

P.S. По-моему, поиск по названию здесь не уместен (или не должен определять структуру БД). Лучше сделать ещё одну таблицу - категория товаров. Тогда пользователь просто выберет категорию и не будет думать - почему в магазине нет теливизоров.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Лёлик2
Лёлик2
Topic Starter сообщение 30.12.2010, 19:36; Ответить: Лёлик2
Сообщение #6


(alexdrob @ 30.12.2010, 21:07) *
а REGEXP по вашему что?)

Да регулярные выражения, я уже понял до конца суть запроса, согласен - просто все в голове не сразу укладывается.
Спасибо большое за помощь, очень мощная штука эти рег. выражения!
Нужно просто проверять код на работоспособность, а не строить догадки.

:rolleyes:
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Лёлик2
Лёлик2
Topic Starter сообщение 30.12.2010, 22:58; Ответить: Лёлик2
Сообщение #7


(zidan @ 30.12.2010, 21:27) *
Лучше сделать ещё одну таблицу - категория товаров. Тогда пользователь просто выберет категорию и не будет думать - почему в магазине нет теливизоров.

Я собирался сделать поиск вариантов предложенных в определенном списке (без орфографических ошибок и с правильными окончаниями), теоретически действительно логичнее было бы сделать древовидную структуру от более общего к более частному, но так как база часто обновляется, ее нужно будет сортировать это трудоемко, мне проще допустить вариант когда в выдачу не попадет магазин, менеджер которого подал список товаров с ошибками - пусть в ворде проверяет, я все на себя взять не могу.
Хотя полного плана в голове у меня еще нету, может я что-нибудь и придумаю в стиле как вы советуете.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
zidan
zidan
сообщение 30.12.2010, 23:42; Ответить: zidan
Сообщение #8


база часто обновляется, ее нужно будет сортировать это трудоемко

Что трудоёмко? ORDER BY для 30-50 категорий? Ни в одном глазу не трудоёмко. Тот, кто будет заносить товар, выберет категорию в списке и не опечатается.

Поиски логичнее сделать уже внутри категории.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Лёлик2
Лёлик2
Topic Starter сообщение 31.12.2010, 14:08; Ответить: Лёлик2
Сообщение #9


(zidan @ 31.12.2010, 01:42) *
Что трудоёмко? ORDER BY для 30-50 категорий?

Я имел ввиду сортировать те данные которые мне подадут с магазинов в общую базу MySQL. Т.е. менеджер подал информацию, что у него продаются "Портативные DVD-проигрователи" кому-то же нужно будет определить, что это частный случай общей категории "DVD-проигрователи" и занести ее туда - это я называл сортировкой базы.
В общем пока решил сделать частично по вашим рекомендациям, частично упрощенный вариант первоначальной задумки:
Программа на C++ будет обрабатывать данные с магазинов и раскидывать их по 64-ех общих категориях.
MySQL база будет состоять из одной таблицы с двух полей: Номер филиала (целочисленного типа) и Товары - типа SET. SELECT буду делать через тот же REGEXP.
Сейчас разбираюсь как правильно выбрать индексирование этого варианта, начитаюсь потом переспрошу правильно ли я понял.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
zidan
zidan
сообщение 31.12.2010, 14:28; Ответить: zidan
Сообщение #10


Т.е. менеджер подал информацию, что у него продаются "Портативные DVD-проигрователи" кому-то же нужно будет определить, что это частный случай общей категории

Работу должен кто-то делать.) Это не сортировка а добавление категорий. Кстати, раскидывание по категориям я бы не доверил программе (предвижу много ошибок).

Я вижу это так: менеджер забивает товары и обнаруживает, что в списке нет категории "DVD-проигрователи". Он звонит тебе (или ещё кому-то) и просит добавить категорию. Через две минуты категория есть в списке. Я не настаиваю на этом решении, но оно напрашивается.

Сейчас разбираюсь как правильно выбрать индексирование

Насколько я знаю MySQL (знаю не очень круто), текст можно индексировать только с помощью FULLTEXT INDEX. Вроде, REGEXP и LIKE не могут использовать это индексирование.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
2 страниц V   1 2 >
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Большие базы Semrush кейвордов по разным тематикам! Много кейвордов с трафиком и без конкуренции! Volume, KD, CPC
22 Krok 6742 12.4.2024, 5:17
автор: Krok
Открытая тема (нет новых ответов) Базы Youtube кейвордов с данными по конкуренции и Volume
5 Krok 1458 11.4.2024, 5:12
автор: Krok
Открытая тема (нет новых ответов) Интеграция спортивных данных API. Коэффициенты БК, Live результаты
15 yaroslav89 6844 8.4.2024, 17:17
автор: spoyer_ru
Горячая тема (нет новых ответов) Свежие базы ключевых слов с подсказок гугла!
125 Krok 68503 7.4.2024, 4:52
автор: Krok
Открытая тема (нет новых ответов) Базы досок объявлений России, Украины, Беларуси и Казахстана
5 freeax 6458 10.3.2024, 15:07
автор: freeax


 



RSS Текстовая версия Сейчас: 20.4.2024, 2:01
Дизайн