it-swarm-es.tech

¿Cómo escribir una instrucción Insert Select?

Esto Método para crear una subconsulta usando JDatabase proporciona una gran comprensión y creo que sería beneficioso tener un método acordado de subconsulta documentado. Me encontré con esto porque quiero hacer lo mismo pero como una declaración de inserción. Lo más cercano que tuve fue replicar toda la tabla porque por alguna razón sigo perdiendo las columnas.

$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

Aunque esta es una vieja pregunta, podría ser útil para otros. Aquí está la consulta de inserción por selección utilizando JDatabase.

Cree alguna consulta de selección usando JDatabase

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

Ahora su consulta de inserción

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

Espero que esto ayude.

2
Nagarjun

Debe escribir qué valores desea insertar

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