Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MySQL > Возможно ли использовать SHOW TABLES в подзапросе?


Автор: Plavozont 31.8.2010, 13:11
Просто делаю что-то вроде CMS в перемешку с СУБД. У меня есть система создающая форму для ввода данных в таблицу. Для каждой таблицы базы, для каждого её поля есть описание, хранящееся в таблице описаний. И в ней можно задать для поля ввод данных из справочника. Делается это при помощи запроса. Например "SELECT field.code, field.name FROM some_table". На основе этого запроса создастся поле на форме ввода типа <select...>...</select>, в котором  <option value=field.code>field.name</option>... И мне нужно сделать всплывающий список в котором можно выбрать таблицу из текущей базы данных, а также поле из этой таблицы. Хотел сделать это с помощью SHOW TABLES и SHOW FIELDS но не смог запихнуть их в подзапрос чтобы привести к виду "SELECT table.name, table.name FROM (SHOW TABLES)".

Автор: skyboy 31.8.2010, 13:54
можно select * from information_schema.tables
а так, как ты хотел - нет, не выйдет.

Автор: Plavozont 31.8.2010, 14:06
Жаль что в information_schema.tables не перечислены поля таблиц...

Автор: skyboy 31.8.2010, 14:47
а все потому, что они перечислены в information_schema.columns

Добавлено через 15 секунд
а так - действительно, жаль.

Автор: Plavozont 2.9.2010, 00:04
Yes, всё плучилось !
SELECT DISTINCT TABLE_NAME as table_name, TABLE_NAME as table_caption FROM (SELECT * FROM information_schema.columns WHERE TABLE_SCHEMA=DATABASE()) as tmp
SELECT c_code, c_name FROM (SELECT TABLE_NAME as table_name, COLUMN_NAME as c_code, COLUMN_NAME as c_name FROM information_schema.columns WHERE TABLE_SCHEMA=DATABASE()) as tmp

Большое спасибо !

Автор: skyboy 2.9.2010, 00:29
Цитата(Plavozont @  1.9.2010,  23:04 Найти цитируемый пост)
SELECT DISTINCT TABLE_NAME as table_name, TABLE_NAME as table_caption FROM (SELECT * FROM information_schema.columns WHERE TABLE_SCHEMA=DATABASE()) as tmp

а подзапрос для чего?

Автор: Plavozont 2.9.2010, 09:50
Чтобы избавиться от WHERE, он там у меня программно потом добавляется, и с примешиванием к имеющемуся WHERE программного не захотел пока заморачиваться.
На самом деле на основе этих запросов создаётся два поля в одном выбираешь таблицу, и на событие onchange в нём второе заполняется списком полей этой таблицы.

Код

SELECT * FROM (SELECT DISTINCT TABLE_NAME as table_name, TABLE_NAME as table_caption FROM information_schema.columns WHERE TABLE_SCHEMA=DATABASE()) as tmp [][field_name]
SELECT c_code, c_name FROM (SELECT TABLE_NAME as table_name, COLUMN_NAME as c_code, COLUMN_NAME as c_name FROM information_schema.columns WHERE TABLE_SCHEMA=DATABASE()) as tmp [table_name][]


волшебненько довольно получается

Автор: 02077461 9.9.2010, 12:50
Ужас, тихий ужас... 
Вы мешаете котлеты с мухами данные со структурой, это раз. Вы жестко и насвегда привязываетесь к одной СУБД (и даже, теоритечески, к ее версии)
Пока не поздно, измените архитектуру проекта. 
<offtop>
skyboy, ваш ответ равносилен "пистолет у виска надо держать вот так."
</offtop>

Автор: skyboy 9.9.2010, 12:59
Цитата(02077461 @  9.9.2010,  11:50 Найти цитируемый пост)
skyboy, ваш ответ равносилен "пистолет у виска надо держать вот так."

угу. медвежья услуга  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)