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



 

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

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

Открыть тему
Тема закрыта
> Schema for database
ZhukV
ZhukV
Topic Starter сообщение 1.6.2011, 19:37; Ответить: ZhukV
Сообщение #1


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

На данный момент, есть такая функция:
[PHP]
function la2schema_get_table_info($table, $id_connection) {
$query = mysql_query("SELECT * FROM {$table} LIMIT 0, 1", $id_connection);
$fields = mysql_num_fields($query);

$table_info = array();
$table_info['fields'] = array();
$flags = array();
for ($i = 0; $i < $fields; $i++) {
$name = mysql_field_name($query, $i);
$table_info['name'] = $name;
$table_info['fields'][$name] = array();
$table_info['fields'][$name]['type'] = mysql_field_type($query, $i);
$table_info['fields'][$name]['length'] = mysql_field_len($query, $i);

if ($table_info['fields'][$name]['length'] <= 255 && $table_info['fields'][$name]['type'] == 'string') {
$table_info['fields'][$name]['type'] = 'varchar';
}

$flags[$name] = explode(' ', mysql_field_flags($query, $i));
if (in_array('not_null', $flags[$name])) {
$table_info['fields'][$name]['not null'] = TRUE;
}

if (in_array('unsigned', $flags[$name])) {
$table_info['fields'][$name]['unsigned'] = TRUE;
}
}

//drupal_set_message('<pre>' . print_r($table_info, 1) . '</pre>');
//drupal_set_message('<pre>' . print_r($flags, 1) . '</pre>');
}
[/PHP]

Здесь достается имя поля, тип, длина.
Как можно достать описание поля (description) и дефоултное значение?
Возможно можно сделать это каким-то СКЛ запросом.
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Witu
Witu
сообщение 1.6.2011, 21:23; Ответить: Witu
Сообщение #2


SHOW CREATE TABLE
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ZhukV
ZhukV
Topic Starter сообщение 1.6.2011, 22:37; Ответить: ZhukV
Сообщение #3


Спс, тему можно закрывать, нашел оргигнальное решение :).


SELECT * FROM `information_schema`.`COLUMNS` WHERE `TABLE_SCHEMA` = '{$database_name}' AND `TABLE_NAME` = '{$table_name}';
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ZhukV
ZhukV
Topic Starter сообщение 2.6.2011, 0:28; Ответить: ZhukV
Сообщение #4


Вот рабочий вариант, сделан на быструю руку, так что, сильно не орать, плз =)

[PHP]/**
* Get info table
*/

function la2schema_get_table_info($db, $table, $id_connection) {
$query = mysql_query("SELECT * FROM `information_schema`.`COLUMNS` WHERE `TABLE_SCHEMA` = '{$db}' AND `TABLE_NAME` = '{$table}'", $id_connection);
$table_info = array('fields' => array(), 'indexes' => array());
$flags = array();
while ($data = mysql_fetch_assoc($query)) {
$table_info['fields'][$data['COLUMN_NAME']] = array();
$fields = &$table_info['fields'][$data['COLUMN_NAME']];

$temp = mysql_query("SELECT {$data['COLUMN_NAME']} FROM `{$db}`.`{$table}` LIMIT 0,1");
$fields['flags'] = explode(' ', mysql_field_flags($temp, 0));
$flags = &$fields['flags'];

switch ($data['DATA_TYPE']) {
case 'int':
$fields['type'] = 'int';
break;

case 'tinyint':
$fields['type'] = 'int';
$fields['size'] = 'tiny';
break;

case 'smallint':
$fields['type'] = 'int';
$fields['size'] = 'small';
break;

case 'bigint':
$fields['type'] = 'int';
$fields['size'] = 'big';
break;

case 'mediumint':
$fields['type'] = 'int';
$fields['size'] = 'medium';
break;

case 'float':
$fields['type'] = 'float';
break;

case 'double':
$fields['type'] = 'double';
break;

case 'text':
$fields['type'] = 'text';
break;

case 'mediumtext':
$fields['type'] = 'text';
$fields['size'] = 'medium';
break;

case 'longtext':
$fields['type'] = 'text';
$fields['size'] = 'long';
break;

case 'tinytext':
$fields['type'] = 'text';
$fields['size'] = 'tiny';
break;

case 'varchar':
$fields['type'] = 'varchar';
$fields['lentgh'] = $data['CHARACTER_MAXIMUM_LENGTH'];
break;

case 'char':
$fields['type'] = 'varchar';
$fields['length'] = $data['CHARACTER_MAXIMUM_LENGTH'];
break;

case 'blob':
$fields['type'] = 'blob';
break;

case 'longblob':
$fields['type'] = 'blob';
$fields['size'] = 'long';
break;

case 'mediumblob':
$fields['type'] = 'blob';
$fields['size'] = 'medium';
break;

case 'bigblob':
$fields['type'] = 'blob';
$fields['size'] = 'big';
break;

case 'date':
$fields['type'] = 'varchar';
$fields['length'] = variable_get('database_get_schema_length_date', 100);
break;

case 'datetime':
$fields['type'] = 'varchar';
$fields['length'] = variable_get('database_get_schema_length_datetime', 15);
break;

case 'enum':
$fields['type'] = 'varchar';
$fields['length'] = 255;
break;

case 'set':
$fields['type'] = 'varchar';
$fields['length'] = 255;
break;

case 'time':
$fields['type'] = 'varchar';
$fields['length'] = variable_get('database_get_schema_length_time', 50);
break;

case 'timestamp':
$fields['type'] = 'varchar';
$fields['length'] = variable_get('database_get_schema_length_timestamp', 20);
break;

default:
$fields['type'] = $data['DATA_TYPE'];
$fields['length'] = $data['CHARACTER_MAXIMUM_LENGTH'];
}

$fields['not null'] = $data['IS_NULLABLE'] == 'NO' ? TRUE : FALSE;

if (in_array('auto_increment', $flags)) {
$fields['type'] = 'serial';
}

if (in_array('unsigned', $flags)) {
$fields['unsigned'] = TRUE;
}

if (in_array('binary', $flags)) {
$fields['serialize'] = TRUE;
}

if (!empty($data['COLUMN_DEFAULT'])) {
$fields['default'] = $data['COLUMN_DEFAULT'];
}
else if (strlen($data['COLUMN_DEFAULT'])) {
$fields['default'] = $data['COLUMN_DEFAULT'];
}

if (!empty($data['COLUMN_COMMENT'])) {
$fields['description'] = $data['COLUMN_COMMENT'];
}

}

$res_indexes = mysql_query("SELECT `INDEX_NAME`, `COLUMN_NAME` FROM `information_schema`.`STATISTICS` WHERE `TABLE_SCHEMA` = '{$db}' AND `TABLE_NAME` = '{$table}'") or drupal_set_message(mysql_error(), 'error');
while (list($index_name, $column_name) = mysql_fetch_array($res_indexes)) {
switch ($index_name) {
case 'PRIMARY':
if (!isset($table_info['primary key']) || !is_array($table_info['primary key'])) {
$table_info['primary key'] = array();
}
$table_info['primary key'][] = $column_name;
break;

default:
if (!isset($table_info['indexes'][$index_name]) || !is_array($table_info['indexes'][$index_name])) {
$table_info['indexes'][$index_name] = array();
}
$table_info['indexes'][$index_name][] = $column_name;
}
}

$table_info['table'] = $table;
return $table_info;
}
[/PHP]

Есть некоторые прочие функции:
variable_get('{VAR_NAME}', {DEFAULT_VALUE});
{DEFAULT_VALUE} оставте, а саум функцию уберите.

Создает schema для использование под фраемворком Друпал 7. Но все же можно и переработать под себя.

Замечание модератора:
Эта тема была закрыта автоматически ввиду отсутствия активности в ней на протяжении 100+ дней.
Если Вы считаете ее актуальной и хотите оставить сообщение, то воспользуйтесь кнопкой
или обратитесь к любому из модераторов.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

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

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Внедрение микроразметки schema.org
9 kretovdima 1829 30.4.2018, 15:10
автор: r0mZet
Открытая тема (нет новых ответов) Сделаю микроразметку schema.org для вашего сайта
Ваши сниппеты будут выглядеть гораздо привлекательнее.
6 SeoInMyLife 3149 23.7.2017, 12:34
автор: SeoInMyLife
Открытая тема (нет новых ответов) Тема имеет прикрепленные файлыВнедрю разметку schema.org для вашего сайта
0 SeoInMyLife 1122 8.7.2017, 11:37
автор: SeoInMyLife
Открытая тема (нет новых ответов) Работы по созданию разметки Schema.org
1 Mukis 1055 27.8.2016, 15:36
автор: Mukis


 



RSS Текстовая версия Сейчас: 29.3.2024, 15:19
Дизайн