我想使用migrate-module将Drupal7网站的内容迁移到另一个Drupal7系统。
我必须添加和映射字段。 drupal中每个内容类型的字段都存储在一个名为field_revision_field_name
的表中。大多数字段的值位于field_name_value
列中。但是有些字段有另一种结构,所以我想检查field_name_value
列是否存在。
我正在连接表并在循环中在mysql查询中添加Fields。问题是,并非每个表"field_revision_".$typeFields[$i]
(别名为$typeFields[$i]."_table"
)都有一列$typeFields[$i]."_value"
:
for ($i=0; $i < sizeof($typeFields); $i++) {
$query->join(
"field_revision_".$typeFields[$i],
$typeFields[$i]."_table",
"n.nid = ".$typeFields[$i]."_table.entity_id"
);
$query->addField($typeFields[$i]."_table", $typeFields[$i]."_value");
}
我想在查询之前检查一下,如下所示:
for ($i=0; $i < sizeof($typeFields); $i++) {
if($typeFields[$i]."_table" has Column $typeFields[$i]."_value"){
$query->join(
"field_revision_".$typeFields[$i],
$typeFields[$i]."_table",
"n.nid = ".$typeFields[$i]."_table.entity_id"
);
$query->addField($typeFields[$i]."_table", $typeFields[$i]."_value");
}
}
答案 0 :(得分:2)
在information_schema
数据库中使用以下查询:
SELECT *
FROM `COLUMNS`
WHERE TABLE_SCHEMA = 'database_name'
AND TABLE_NAME = 'table_name'
AND COLUMN_NAME = 'field_name'
答案 1 :(得分:1)
使用DESCRIBE
查询,其中列出了表中的列。
以下是说明:http://dev.mysql.com/doc/refman/4.1/en/describe.html
答案 2 :(得分:1)
它真的像这个XY问题。
D7函数field_info_field()包含有关存储数据的列的信息,因此我不必询问列是否存在。
但是谢谢你
答案 3 :(得分:0)
也许这可以帮助
$fields = mysql_list_fields('database_name', 'table_name');
$columns = mysql_num_fields($fields);
for ($i = 0; $i < $columns; $i++) {$field_array[] = mysql_field_name($fields, $i);}
if (!in_array('price', $field_array)){
$result = mysql_query('ALTER TABLE table_name ADD price VARCHAR(10)');
}
答案 4 :(得分:0)
这样怎么样:
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'database_name'
AND TABLE_NAME = 'table_name'
AND COLUMN_NAME = 'field_name'
类似