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
Форумы портала PHP.SU :: Версия для печати :: Выбор данных из двухтабличного запроса (Firebird)
Форумы портала PHP.SU » » Работа с СУБД » Выбор данных из двухтабличного запроса (Firebird)

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

1. Kouki - 26 Июля, 2011 - 08:10:53 - перейти к сообщению
Требуется получить метаданные из таблицы - список полей и их типы. Список можно получить из 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 обрабатываются как один массив. Мне же надо, грубо говоря, получить следующее: поле - тип, поле - тип...
2. Kouki - 27 Июля, 2011 - 07:27:49 - перейти к сообщению
Все еще нужна помощь. Если никто не хочет разбираться в метаданных и прочее, переформулирую задачу.
Требуется одним запросом извлечь из 2 таблиц по одному полю и вывести все это дело в виде "поле_1 - поле_2".
3. Kouki - 27 Июля, 2011 - 12:42:37 - перейти к сообщению
Сам понял. Примерно вот так:

$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;";

 

Powered by ExBB FM 1.0 RC1