Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Выбор данных из двухтабличного запроса (Firebird)

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Kouki
Отправлено: 26 Июля, 2011 - 08:10:53
Post Id


Новичок


Покинул форум
Сообщений всего: 21
Дата рег-ции: Июнь 2011  


Помог: 0 раз(а)




Требуется получить метаданные из таблицы - список полей и их типы. Список можно получить из rdb$relation_fields, а типы из rdb$fields. Следовательно нужен двухтабличный запрос. Попробовал вот так:

$query = "SELECT * FROM (SELECT RDB\$FIELD_TYPE AS FIELD_TYPE FROM RDB\$FIELDS WHERE RDB\$SYSTEM_FLAG = 0 UNION ALL SELECT RDB\$FIELD_NAME as FIELD_NAME FROM RDB\$RELATION_FIELDS WHERE RDB\$RELATION_NAME = 'TABLE')";
$res = ibase_query($dbh, $query);
while ($row_table_names = ibase_fetch_object($res))
{
print($row_table_names->FIELD_NAME.' - '.$row_table_names->FIELD_TYPE);
}

Выводит - 37 - 37 - 37 - NAME - AGE - FULL_NAME

Если попробовать:

var_dump($row_table_names);

Выводит object(stdClass)#1 (1) { ["FIELD_TYPE"]=> string(2) "37" } object(stdClass)#2 (1) { ["FIELD_TYPE"]=> string(2) "37" } object(stdClass)#1 (1) { ["FIELD_TYPE"]=> string(2) "37" } object(stdClass)#2 (1) { ["FIELD_TYPE"]=> string(31) "NAME " } object(stdClass)#1 (1) { ["FIELD_TYPE"]=> string(31) "AGE " } object(stdClass)#2 (1) { ["FIELD_TYPE"]=> string(31) "FULL_NAME " }

Т.е. данные из двух RDB обрабатываются как один массив. Мне же надо, грубо говоря, получить следующее: поле - тип, поле - тип...

(Отредактировано автором: 26 Июля, 2011 - 08:16:27)

 
 Top
Kouki
Отправлено: 27 Июля, 2011 - 07:27:49
Post Id


Новичок


Покинул форум
Сообщений всего: 21
Дата рег-ции: Июнь 2011  


Помог: 0 раз(а)




Все еще нужна помощь. Если никто не хочет разбираться в метаданных и прочее, переформулирую задачу.
Требуется одним запросом извлечь из 2 таблиц по одному полю и вывести все это дело в виде "поле_1 - поле_2".
 
 Top
Kouki
Отправлено: 27 Июля, 2011 - 12:42:37
Post Id


Новичок


Покинул форум
Сообщений всего: 21
Дата рег-ции: Июнь 2011  


Помог: 0 раз(а)




Сам понял. Примерно вот так:

$query = "select R.RDB\$FIELD_NAME as FIELD_NAME, F.RDB\$FIELD_LENGTH AS FIELD_LENGTH, t.rdb\$type_name AS TYPE_NAME FROM RDB\$FIELDS F, RDB\$RELATION_FIELDS R, rdb\$types t WHERE (F.RDB\$FIELD_NAME = R.RDB\$FIELD_SOURCE) AND (R.RDB\$SYSTEM_FLAG = 0) AND F.RDB\$FIELD_TYPE = t.RDB\$TYPE AND t.rdb\$field_name = 'RDB\$FIELD_TYPE' AND (RDB\$RELATION_NAME = 'TABLE') ORDER BY R.RDB\$FIELD_POSITION;";
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Работа с СУБД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB