SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 21.01.2008 09:44:42

Никита
Завсегдатай
Откуда: Тюмень
Зарегистрирован: 15.11.2007
Сообщений: 73

Применение шаблонов в названии столбца

Здравствуйте!У меня возникла проблема:Мне необходимо вывести те столбцы,имена которых соответсвует шаблону.Но у меня возникает ошибка.Обьясните в чем проблема.Вот код:
<?php
//Задаем минимальный уровень
$level=1;
//Загружаем содержимое файла config.php
include "config.php";
// Формируем SQL-запрос
$query = "SELECT %-$level FROM struc";
// Выполняем SQL-запрос
$tst = mysql_query($query);
// Проверяем успешность выполнения SQL-запроса
if(!$tst) exit(mysql_error());
// Выводим результат
$num=mysql_num_rows($tst);
echo $num;
?>

Неактивен

 

#2 21.01.2008 10:58:31

LazY
_cмельчак
MySQL Authorized Developer and DBA
Зарегистрирован: 02.04.2007
Сообщений: 849

Re: Применение шаблонов в названии столбца

необходимо вывести те столбцы,имена которых соответсвует шаблону

К сожалению, синтаксис SQL не позволяет указывать список столбцов в виде шаблона. Их необходимо все прописывать явно.

Если Вы используете MySQL пятой версии, то можно написать процедуру, которая принимает шаблон, формирует из него список столбцов для нужной таблицы (на основе INFORMATION_SCHEMA) и возвращает соотв. данные.

Неактивен

 

#3 21.01.2008 12:05:24

Никита
Завсегдатай
Откуда: Тюмень
Зарегистрирован: 15.11.2007
Сообщений: 73

Re: Применение шаблонов в названии столбца

А как можно применить INFORMATION_SCHEMA к моей проблеме?Я просто еще только начинающий и мало что знаю о БД)

Неактивен

 

#4 21.01.2008 12:12:26

LazY
_cмельчак
MySQL Authorized Developer and DBA
Зарегистрирован: 02.04.2007
Сообщений: 849

Re: Применение шаблонов в названии столбца

Для начала давайте убедимся, что у Вас нужная версия сервера.
Что дает запрос SELECT VERSION() ?

Неактивен

 

#5 21.01.2008 12:18:01

Никита
Завсегдатай
Откуда: Тюмень
Зарегистрирован: 15.11.2007
Сообщений: 73

Re: Применение шаблонов в названии столбца

Вообще я работаю с Denwer,и если верить разработчикам,то у этого сервера такие параметры:Apache 2 + SSL, PHP 5, MySQL 5.

Неактивен

 

#6 21.01.2008 12:28:40

LazY
_cмельчак
MySQL Authorized Developer and DBA
Зарегистрирован: 02.04.2007
Сообщений: 849

Re: Применение шаблонов в названии столбца

Узнаете точно, если выполните SELECT VERSION();
(это можно сделать, например, в консоли mysql)

Что-то я сомневаюсь, чтобы в Денвере был пятый MySQL...

Неактивен

 

#7 21.01.2008 12:38:14

Никита
Завсегдатай
Откуда: Тюмень
Зарегистрирован: 15.11.2007
Сообщений: 73

Re: Применение шаблонов в названии столбца

MySQL 5.0.45-community-nt

Неактивен

 

#8 21.01.2008 13:23:15

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

Re: Применение шаблонов в названии столбца

Ура, денвер обновили smile)

SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA='dbname' AND
TABLE_NAME LIKE '%criterion';

Это выведет список таблиц в базе dbname с названием, удовлетворяющим
шаблону %criterion.

Неактивен

 

#9 21.01.2008 13:32:18

Никита
Завсегдатай
Откуда: Тюмень
Зарегистрирован: 15.11.2007
Сообщений: 73

Re: Применение шаблонов в названии столбца

Дело в том,что мне надо выводить не имена таблиц,а именно имена столбцов....

Неактивен

 

#10 21.01.2008 13:38:11

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

Re: Применение шаблонов в названии столбца

Никита написал:

А как можно применить INFORMATION_SCHEMA к моей проблеме?Я просто еще только начинающий и мало что знаю о БД)

INFORMATION_SCHEMA Это виртуальная база (не хранится в виде файлов, а формируется во время запуска сервера) содержащая метаданные баз данных, т.е. информацию о структуре баз данных.
В ней есть таблица COLUMNS, содержащая информацию о всех колонках в таблицах. Из неё можно получить имена интересующих Вас столбцов с помощью поиска по шаблону

Код:

SELECT column_name FROM `INFORMATION_SCHEMA.COLUMNS` WHERE table_name='db_name.tb_name' AND column_name LIKE '%pattern';

Неактивен

 

#11 21.01.2008 13:40:39

Никита
Завсегдатай
Откуда: Тюмень
Зарегистрирован: 15.11.2007
Сообщений: 73

Re: Применение шаблонов в названии столбца

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

Неактивен

 

#12 21.01.2008 13:42:16

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

Re: Применение шаблонов в названии столбца

Никита написал:

Дело в том,что мне надо выводить не имена таблиц,а именно имена столбцов....

Подробнее Вам стоит посмотреть документацию
по хранимому коду http://dev.mysql.com/doc/refman/5.0/en/ … dures.html
и INFORMATION_SCHEMA http://dev.mysql.com/doc/refman/5.0/en/ … chema.html

Выполните

Код:

SHOW TABLES FROM INFORMATION_SCHEMA

Из названий и структур таблиц, в общем-то, понятно о чем идет речь и какая Вам нужна.

Например, результат последней команды можно получить с помощью INFORMATION_SCHEMA

Код:

SELECT TABLE_NAME FROM TABLES WHERE TABLE_SCHEMA='INFORMATION_SCHEMA';

Отредактированно vasya (21.01.2008 13:46:05)

Неактивен

 

#13 21.01.2008 13:54:22

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

Re: Применение шаблонов в названии столбца

Никита написал:

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

Рано радуетесь. При написании процедуры в Вашем случае будет след. нюанс. После выборки из INFORMATION_SCHEMA интересующих Вас столбцов для формирования окончательного запроса нужно будет использовать подготовленные выражения (см. http://dev.mysql.com/doc/refman/5.0/en/sqlps.html), но там все достаточно просто.

Неактивен

 

#14 21.01.2008 14:22:03

LazY
_cмельчак
MySQL Authorized Developer and DBA
Зарегистрирован: 02.04.2007
Сообщений: 849

Re: Применение шаблонов в названии столбца

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

Неактивен

 

#15 21.01.2008 14:44:46

Никита
Завсегдатай
Откуда: Тюмень
Зарегистрирован: 15.11.2007
Сообщений: 73

Re: Применение шаблонов в названии столбца

Знаете,я сейчас пробовал разобраться с подготовленными выражениями,но так ничего и не понял.....Если можно то обьясните мне подробнее....И еще я пытался разлбраться с кодом,который вы мне дали:
"SELECT column_name FROM `INFORMATION_SCHEMA.COLUMNS` WHERE structura='structura.struc' AND column_name LIKE '%$level'"
,но чего то у меня ничего не получилось.....Если я правильно понял,то синтаксис написания примерно такой:
"SELECT имя столбца FROM `INFORMATION_SCHEMA.COLUMNS` WHERE имя бд='имя бд.имя таблицы' AND имя столбца LIKE '%$level'"
Но в таком случае получается,что столбец все равно приходится указывать....Что в моем случае недопустимо.....

Неактивен

 

#16 21.01.2008 15:00:44

LazY
_cмельчак
MySQL Authorized Developer and DBA
Зарегистрирован: 02.04.2007
Сообщений: 849

Re: Применение шаблонов в названии столбца

Подготовленные выражения - это возможность выполнить (точнее, попытаться выполнить) абсолютно любую строку:

PREPARE имя_выражения_какое_хотите FROM какой_нибудь_запрос;
EXECUTE имя_выражения_какое_хотите;

Запрос можно вписать сразу,  например:
PREPARE имя_выражения_какое_хотите FROM SELECT * FROM table_name;

Или сначала сделать переменную и потом приготовить из нее:
SET @query = 'SELECT * FROM table_name';
PREPARE имя_выражения FROM @query;

я пытался разлбраться с кодом,который вы мне дали:
"SELECT column_name FROM `INFORMATION_SCHEMA.COLUMNS` WHERE structura='structura.struc' AND column_name LIKE '%$level'"
,но чего то у меня ничего не получилось....

Что конкретно не получилось?

в таком случае получается,что столбец все равно приходится указывать....Что в моем случае недопустимо.....

Запрос, приведенный выше, выбирает имена всех столбцов, содержащие некий фрагмент, причем выборка делается из всех столбцов всех таблиц.
Соответственно, если не укажете таблицу, то запрос Вам вернет столбцы с нужными именами, но из непонятно каких таблиц, поэтому имя таблицы указать будет очень полезно (как, кстати, и имя БД; правда, это менее критично).

А почему недопустимо указывать имя таблицы? В чем трудность?

Неактивен

 

#17 21.01.2008 15:10:13

Никита
Завсегдатай
Откуда: Тюмень
Зарегистрирован: 15.11.2007
Сообщений: 73

Re: Применение шаблонов в названии столбца

В моем случае имя таблицы указывать допустимо,а вот столбец должен выбираться автоматическиsmileЕсли я вас правильно понял,то в моем случае получается вот такой програмный код:
//Задаем минимальный уровень
$level=1;
//Загружаем содержимое файла config.php
include "config.php";
// Формируем SQL-запрос
SET @query = 'SELECT * FROM struct;
$query = "PREPARE %-$level FROM @query";
// Выполняем SQL-запрос
$tst = mysql_query($query);

Неактивен

 

#18 21.01.2008 15:10:41

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

Re: Применение шаблонов в названии столбца

Никита написал:

И еще я пытался разлбраться с кодом,который вы мне дали:
"SELECT column_name FROM `INFORMATION_SCHEMA.COLUMNS` WHERE structura='structura.struc' AND column_name LIKE '%$level'"
,но чего то у меня ничего не получилось.....Если я правильно понял,то синтаксис написания примерно такой:
"SELECT имя столбца FROM `INFORMATION_SCHEMA.COLUMNS` WHERE имя бд='имя бд.имя таблицы' AND имя столбца LIKE '%$level'"
Но в таком случае получается,что столбец все равно приходится указывать....Что в моем случае недопустимо.....

Ошибка в том, что правильно будет `INFORMATION_SCHEMA`.`COLUMNS`
Можно вообще без бэктиков указать.


Синтаксис такой:
SELECT column_name FROM `INFORMATION_SCHEMA`.`COLUMNS` WHERE table_schema='имя бд' AND table_name='имя таблицы' AND column_name LIKE '%шаблон%';
Указываете Вы не столбец, а шаблон, что Вам и требовалось.

Неактивен

 

#19 21.01.2008 15:21:04

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

Re: Применение шаблонов в названии столбца

Lazy написал:

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

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

Отредактированно vasya (21.01.2008 15:32:03)

Неактивен

 

#20 21.01.2008 15:26:56

Никита
Завсегдатай
Откуда: Тюмень
Зарегистрирован: 15.11.2007
Сообщений: 73

Re: Применение шаблонов в названии столбца

Бальшое спасибо!!!Премного вам благодарен!!!У меня все заработало)Извините,что прешлось мне все так долго обьяснятьsmile

Неактивен

 

Board footer

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