SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 21.01.2010 22:21:52

antone
Участник
Зарегистрирован: 21.01.2010
Сообщений: 4

Поиск по множеству таблиц

Здраствуйте.

Ребят, вот, допустим, у меня есть 50 таблиц и в каждой есть поле name, можно как-нибудь использовать поиск по всем таблицам для поля name?

Неактивен

 

#2 21.01.2010 23:19:14

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Поиск по множеству таблиц

Я не против wink

Если структура одинаковая — то почему 50 таблиц, а не одна?
Если структура разная — то как должна выглядеть выборка из 50 разных
таблиц? Какую структуру она должна иметь?

Неактивен

 

#3 22.01.2010 00:22:08

antone
Участник
Зарегистрирован: 21.01.2010
Сообщений: 4

Re: Поиск по множеству таблиц

Структура разная, но в каждой таблице есть поле name.

Оговорюсь. Вообще-то никаких таблиц еще нет (но будут).
Просто я подумал, что вдруг такое возможно, типа создал еще одну (родительскую) таблицу и привязал ее поле name к полям name других таблиц. Что-то похожее на то, как действует удаление\обновление с FOREIGN KEY, но только для поиска по множеству таблиц
А дальше обращаешься только к родительской таблице, а она ищет по всем сама, на подобии:
SELECT * FROM parent WHERE name = 'что-то';

Такое не возможно сделать?

Отредактированно antone (22.01.2010 00:24:15)

Неактивен

 

#4 22.01.2010 13:20:52

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Поиск по множеству таблиц

Можете сделать VIEW как SELECT name FROM table1 UNION SELECT name FROM table2, …
Но смысла в этом нет, никаких дополнительных данных Вы получить из такого
представления не сможете. Просто потому что структура таблиц разная.

Аналогия приблизительно такая: у Вас есть таблица-каталог телефонов и словарь русского
языка. И у записей в словаре, и у телефонов есть поле name. Но только человек, нашедший
телефон 7912 хочет увидеть не только «7912», но еще и полезную информацию (тип, цвет,
что там еще у телефонов бывает). А человек, нашедший «дезоксирибонуклеиновая» был бы
не против узнать расшифровку слова. А Вы такой выборкой сможете сказать только «да, есть
такое». smile

Неактивен

 

#5 22.01.2010 20:27:47

antone
Участник
Зарегистрирован: 21.01.2010
Сообщений: 4

Re: Поиск по множеству таблиц

Подскажите, тогда, пожалуйста, как мне спроектировать БД?
Еще раз распишу, дано:
Неопределенное кол-во таблиц (за ранее неизвестно, т.к. в любой момент может добавиться новая).
Пример, таблицы: Сars, Schools, Hospitals - таких разных объектов (таблиц) может быть много.
Т.к. структура у этих таблиц в большинстве случаев разная (у кого-то есть цена, у кого адрес сайта и т.п.), следовательно, я не могу (наверное?) запихать все это в одну большую таблицу. Придеться делать много разных таблиц.
Но как тогда осуществить банальный поиск по ним? Если на сайте есть форма поиска, и человек введет, например: "Аптеки", как мне определить в какой таблице это искать?

Пока у меня один вариант:
Делаю одну главную таблицу (base) с полями
id - её айди
keyword - ключевое слово, по которому искать
name_table - название таблицы, в которой нужно искать объект
id_name_table - айди таблицы (name_table)
Примерный вид.
+----+----------+--------------+-----------------+
| id   | keyword | name_table | id_name_table |
+----+----------+--------------+-----------------+
|  1   | Star      | Shops         |             1       |
|  2   | Space    | Shops         |             2       |
|  3   | Audi      | Cars           |             7       |
+----+---------+---------------+-----------------+

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

В общем, проблему с поиском я расписал, хотел бы услышать, такой (мой) способ приемлемый? Может предложите как можно сделать более правильно и грамотно?

Неактивен

 

#6 22.01.2010 21:16:37

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Поиск по множеству таблиц

Сделайте одну таблицу с общими для всех типов данных полями и BLOB для всего остального —
если искать будете только по имени. Если по содержимому BLOBа, то несколько таблиц и несколько
запросов, да.

Неактивен

 

#7 22.01.2010 21:52:35

antone
Участник
Зарегистрирован: 21.01.2010
Сообщений: 4

Re: Поиск по множеству таблиц

Извините, я плохо знаю mysql и не совсем понятно как использовать blob для всего остального.
Создать таблицу с общими полями + 1 столбец с типом blob и туда пихать все различные характеристики?

Неактивен

 

#8 26.01.2010 10:48:08

skeef
Участник
Зарегистрирован: 29.01.2009
Сообщений: 17

Re: Поиск по множеству таблиц

Если вы будете дробиться на множество таблиц, а потом искать варианты их объединения, то в лучшем случае просто запутаетесь, а в худшем - ничего не будет работать.
Уходите от универсальности в конкретику.
Чтобы было понятно: вместо одного универсального поля ПОИСК сделайте несколько, например, ПОИСК ПО АПТЕКАМ, ПОИСК ЗАПЧАСТЕЙ или по меню разбейте сайт на разделы. Понятно что в разделе Аптеки глупо искать бензонасос.
И вам будет жить проще и людям не придется долго объяснять, что в поле ПОИСК можно искать все, потому как наш человек сразу будет искать порно, девочеки т.д. ... ну так, для проверки wink
А если серьезно ...
В любом случае вы не сможете предусмотреть, а значит написать обработку, ВСЕХ вариантов запросов, которые будут вводить в универсальное поле поиска любимые пользователи smile

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson