web-dev-qa-db-ja.com

Insert Selectステートメントの書き方

この JDatabaseを使用してサブクエリを作成する方法 は、優れた洞察を提供します。サブクエリの合意された方法を文書化しておくことは有益だと思います。同じことをしたいのに、挿入ステートメントとしてこれに遭遇しました。なんらかの理由で列を失い続けているため、これまでで最も近いのはテーブル全体を複製したものです。

$query = $db->getQuery(true);
$pre = $db->getQuery(true);

// Insert columns.
$columns = array('user_id', 'title', 'ordering', 'published', 'description');

$now = $query->currentTimestamp();
// Insert values.

$pre->insert($db->qn('#__table'))->columns($db->qn($columns));


// Prepare the insert query.
$query->select(array(
                    $db->q('') . ' AS id',
                    $db->qn('user_id'),
                    $db->qn('c.name', 'title'),
                    $db->q('1') . ' AS published',
                    $db->q('') . ' AS ordering',
                    $db->q('') . ' AS created_by',
                    $now .  ' AS created_on',
                    $db->q('') . ' AS modified_by',
                    $db->q('') . ' AS modified_on',
                    )
            )
            ->from($db->qn('#__other_table', 'c'));

    $query = $pre . $query ;

    // Set the query using our newly populated query object and execute it.
    $db->setQuery($query);

    $db->execute();
4
poproar

これは古い質問ですが、他の人に役立つかもしれません。これは、JDatabaseを使用した選択クエリによる挿入です。

JDatabaseを使用していくつかの選択クエリを作成する

$querySelect = $db->getQuery(true)
  ->select('id, title')
  ->from('sometable');

今あなたの挿入クエリ

$queryInsert = $db->getQuery(true)
  ->insert('anothertable')
  ->columns($db->qn(array('id','title')))
  ->values($querySelect)

お役に立てれば。

2
Nagarjun

挿入する値を入力する必要があります

$pre->insert($db->qn('#__table'))->columns($db->qn($columns))->values(here values);
4
turson