-2

移行モジュールを使用して、Drupal7 Web サイトのコンテンツを別の Drupal7 システムに移行したいと考えています。

フィールドを追加してマップする必要があります。drupal のすべてのコンテンツ タイプのフィールドは、 というテーブルに格納されますfield_revision_field_name。ほとんどのフィールドの値は列にありますfield_name_valuefield_name_valueしかし、いくつかのフィールドは別の構造を持っているので、列が存在するかどうかを確認したい.

テーブルを結合し、ループ内の mysql クエリにフィールドを追加しています。問題は、すべてのテーブル"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");
  }       
}
4

5 に答える 5

2
  1. 動的スキーマが悪いというコメントで@eggyalが言ったこと。
  2. information_schemaデータベースで次のクエリを使用します。

    SELECT *
    FROM `COLUMNS`
    WHERE TABLE_SCHEMA = 'database_name'
      AND TABLE_NAME = 'table_name'
      AND COLUMN_NAME = 'field_name'
    
于 2013-07-02T15:26:32.080 に答える
1

DESCRIBEとりわけ、テーブル内の列を一覧表示するクエリを使用します。ここに説明があります:http://dev.mysql.com/doc/refman/4.1/en/describe.html

于 2013-07-02T15:26:50.137 に答える
1

それは本当にこのXY問題のようなものでした。

D7 関数 field_info_field() には、データが格納されている列に関する情報があるため、列が存在するかどうかを確認する必要はありません。

でもありがとう

于 2013-07-06T20:43:05.300 に答える
0

この方法はどうですか:

SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'database_name'
  AND TABLE_NAME = 'table_name'
  AND COLUMN_NAME = 'field_name'
上と似てる

于 2015-08-17T12:26:51.430 に答える
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)');
}
于 2013-07-02T15:28:02.267 に答える