SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 17.07.2009 22:31:17

BARRAKKUD
Участник
Зарегистрирован: 17.07.2009
Сообщений: 5

Как автоматически выбрать таблицу БД по критерию?

Всех приветствую!

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

Например, есть 3-4 таблицы, в которых есть по одному одинаковому полю, но значения полей разные. Так вот я хочу выбрать все поля таблицы по конкретному значению ее поля.

Запрос мой возможно будет выглядеть так:

SELECT * WHERE fieldname='1', где:

* - количество всех имеющихся таблиц в БД;
fieldname - название поля, которое имеется во всех таблицах;
'1' - значение поля, по которому и происходит выборка определенной таблицы;

Данный запрос конечно утрирован и не корректен, т.к. я не знаю как написать его правильно, но суть моей задачи, думаю, ясна.

Если такого запроса нет, то есть ли альтернативное решение проблемы когда необходимо чтобы один php файл мог производить выборку данных из определенной таблицы БД автоматически по определенному критерию, т.е. стало известно значение поля таблицы - происходит ее выборка.

Заранее благодарю за помощь.

Дмитрий

Неактивен

 

#2 18.07.2009 00:03:57

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Как автоматически выбрать таблицу БД по критерию?

Синтаксис SQL требует явно указывать имена таблиц в запросе. Если у вас Mysql 5ой версии и выше, то вы можете использовать information_schema для получения имен таблиц, содержащих fieldname и подготовленные выражения для формирования запроса.
См:
http://sqlinfo.ru/forum/viewtopic.php?id=363
http://sqlinfo.ru/forum/viewtopic.php?id=356

Неактивен

 

#3 18.07.2009 13:44:33

BARRAKKUD
Участник
Зарегистрирован: 17.07.2009
Сообщений: 5

Re: Как автоматически выбрать таблицу БД по критерию?

Спасибо за ответ.

К сожалению у меня версия ниже 5-ой.

А нельзя ли решить этот вопрос при помощи оператора UNION?

Неактивен

 

#4 18.07.2009 13:52:00

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Как автоматически выбрать таблицу БД по критерию?

Если количество таблиц не известно изначально (а именно так я понял исходное условие), то UNION вам ничем не поможет.

Неактивен

 

#5 18.07.2009 16:07:35

BARRAKKUD
Участник
Зарегистрирован: 17.07.2009
Сообщений: 5

Re: Как автоматически выбрать таблицу БД по критерию?

Понятно.

В таком случае нужно искать другие способы решения проблемы. В связи с этим возникают дополнительные вопросы для меня, так как у меня было мало практики с использованием MySQL.

1)
На самом деле если всю информацию закладывать в одну общую таблицу, то все вышеописанные проблемы (а также которые возникнут в будущем) отпадают сами собой, но тут встаёт вопрос с оптимизацией памяти.

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

В итоге получаем одну таблицу, где общее количество полей, например, равно 15. Первые 10 полей будут всегда заполнены для всех категорий, а вот остальные 5 будут заполняться в зависимости от категории. Таким образом я получу таблицу, которая будет иметь пустые поля.

Будет ли такая таблица кушать много лишней памяти? И вообще как нужно организовывать БД когда есть несколько категорий информации - создавать по одной таблицы для каждой категории или создавать общую таблицу для всех категорий? Ведь при добавлении на сайт блока поиска, вывода обновлений и т.д. легче использовать одну таблицу.

2)
Еще, как вариант, можно создать одну общую таблицу для повторяющихся основных полей у всех категорий и по отдельной таблице с дополнительными полями для каждой категории. в этом случае проблемы с памятью отпадают, т.к. каждая таблица будет запонена только необходимыми данными.

Но тогда какие здесь еще могут быть способы связки общей таблицы с дополнительными, ведь, на мой взгляд, способ fieldname (общей таблицы) = fieldname (дополнительных таблиц) не удобен, т.к. при добавлении инфы в общую таблицу, нужно тут же добавлять инфу в дополнительные, чтобы сохранить синхронизацию и связь.

Как вы справляетесь с такой задачей?

Неактивен

 

#6 19.07.2009 18:41:13

BARRAKKUD
Участник
Зарегистрирован: 17.07.2009
Сообщений: 5

Re: Как автоматически выбрать таблицу БД по критерию?

Вобщем в итоге решил я создать 2 таблицы. Одну с общими полями для все категорий, а во вторую определю все дополнительные поля для каждой категории.

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

Таким образом я обошел вопрос, когда было необходимо делать выборку из разных, заранее неизвестных таблиц по критерию при помощи information_schema.

Неактивен

 

#7 20.07.2009 15:48:00

BARRAKKUD
Участник
Зарегистрирован: 17.07.2009
Сообщений: 5

Re: Как автоматически выбрать таблицу БД по критерию?

Все-таки я кажется нашел способ выборки заранее неизвестной таблицы из числа других.

Итак, допустим имеем два php файла. В первом прописаны ссылки на второй php файл, но в этих ссылках также методом _GET передается какая-нибудь переменная с символьным значением. Каждое значение соответсвует названию таблицы в БД.

Например, ссылка_1(file2.php?cat=table1), ссылка_2(file2.php?cat=table2) и т.д.

Когда file2.php получает эту переменную $cat, просто делаем запрос к БД:

SELECT * FROM $cat

Этот запрос к БД работает нормально, я проверял.

Таким образом можно автоматически выбрать заранее неизвестную таблицу из БД.

Остается надеется, что здесь нет никаких подводных камней.

Неактивен

 

Board footer

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