Joomla 使用单个查询插入多行

Joomla 使用单个查询插入多行,joomla,joomla1.5,joomla2.5,joomla-dbo,Joomla,Joomla1.5,Joomla2.5,Joomla Dbo,Joomla的DB对象可以一次添加多行吗?MySQL可以这样做: INSERT INTO x (a,b) VALUES ('1', 'one'), ('2', 'two'), ('3', 'three') 但是Joomla自己的函数能在一个查询中实现同样的功能吗?目前,我正在做一个循环,在单独的查询中插入每一行(同一个表)。一次处理成吨的行不是一个好主意。在您的模型中,您可以这样做: $db = $this->getDBO(); $query = " INSERT INTO

Joomla的DB对象可以一次添加多行吗?MySQL可以这样做:

INSERT INTO x (a,b)
VALUES 
 ('1', 'one'),
 ('2', 'two'),
 ('3', 'three')

但是Joomla自己的函数能在一个查询中实现同样的功能吗?目前,我正在做一个循环,在单独的查询中插入每一行(同一个表)。一次处理成吨的行不是一个好主意。

在您的模型中,您可以这样做:

$db = $this->getDBO();
$query = "
  INSERT INTO x (a,b)
  VALUES 
  ('1', 'one'),
  ('2', 'two'),
  ('3', 'three')
";
$db->setQuery($query);
$db->query();
如果您在模型之外,则需要获得DB对象,如下所示:

$db = JFactory::getDBO();

您不需要
$db=$this->getDBO()

只要用这个:-

$query = "
  INSERT INTO x (a,b)
  VALUES 
  ('1', 'one'),
  ('2', 'two'),
  ('3', 'three')
";

$this->_db->setQuery($query);
$this->_db->query();
您可以使用:

$db = JFactory::getDbo();
$query = $db->getQuery(true); // !important, true for every new query

$query->insert('#__table_name'); // #__table_name = databse prefix + table name
$query->set('`1`="one"');
$query->set('`2`="two"');
$query->set('`3`="three"');
/* or something like this:
$query->columns('`1`,`2`,`3`');
$query->values('"one","two","three"');
*/

$db->setQuery($query);
$db->query();
如果您有autoinc id,则
$db->insertId()
可以返回您的autoinc id。

尝试以下方法:

$db = JFactory::getDbo();
$query = $db->getQuery(true);

$query->insert('x');
$query->columns('a,b');
$query->values('1', 'one');
$query->values('2', 'two');
$query->values('3', 'three');

$db->setQuery($query);
$db->query();
“值”方法的描述

添加将用作INSERT INTO语句值的元组或元组数组。
用法:
$query->values('1,2,3')->values('4,5,6')
$query->value(数组('1,2,3','4,5,6')


如果数组中有值,请尝试以下操作:

$query = $this->db->getQuery(true);
$query->insert($this->db->quoteName('#__table_name'));
$query->columns($this->db->quoteName(array('col_1','col_2','col_3','col_4')));

for($i=0; $i < lengthOfArray; $i++)
{
    $values= $arr_1[$i].','.$this->db->quote($arr_2[$i]).','.$this->db->quote($arr_3[$i]).','. $arr_4[$i];
    $query->values($values);
}
$this->db->setQuery($query);
$result = $this->db->query();
$query=$this->db->getQuery(true);
$query->insert($this->db->quoteName('#u_u表名称'));
$query->columns($this->db->quoteName(数组('col_1','col_2','col_3','col_4'));
对于($i=0;$idb->quote($arr_2[$i]),'.$this->db->quote($arr_3[$i]),'.$arr_4[$i];
$query->values($values);
}
$this->db->setQuery($query);
$result=$this->db->query();

在最新版本的Joomla!,您可以使用它自己的DB类,如下所示。记住根据需要使用'quoteName()'和'quote()'函数

$dbo = JFactory::getDbo();
$query = $dbo->getQuery(true);

$columns = array('col_one','col_two', 'col_three');
$values = array();

//if you need, here you can use forloop/foreach loop to populate the array
$values[] = 'val_1, val_2, val_3'; // first row values
$values[] = 'val_4, val_5, val_6'; // second row values
...

$query->insert($dbo->quoteName('#__table_name'));
$query->columns($columns);

$query->values($values);

$dbo->setQuery($query);
$dbo->query();

希望这能节省你的时间。谢谢快乐编码!:)

如何在Joomla中插入它?
$this->store($data,'tablename')
-使用Jtable实例是的,我就是这么做的。问题是,我必须对INSERT和UPDATE执行两个单独的查询。对于JTable实例,它将根据主键的存在自动进行选择。那为什么JTable必须选择呢?当然,它还需要同时执行插入和更新操作,除非您没有提到您想要执行的操作。我已经用$query->columns、$query->values更正了测试的答案,因为它最初是错误的。这非常有效,除非您在1000行上尝试,那么,为了提高效率,我宁愿建议马丁的解决方案。
...
$columns = array('user_id', 'type', 'object', 'lvl', 'date');
$values  = array();
foreach ($batch as $row) {
    $array    = array(
        $row->user_id,
        $db->quote($row->type),
        $db->quote($row->object),
        $db->quote($row->lvl),
        $db->quote($row->date),
    );
    $values[] = implode(',', $array);
}
$query->insert($db->quoteName('#activity_log'));
$query->columns($db->quoteName($columns));
$query->values($values);

$db->setQuery($query);
$result = $db->execute();