Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP SQL Joomla 3中的多表查询_Php_Sql_Joomla3.2 - Fatal编程技术网

PHP SQL Joomla 3中的多表查询

PHP SQL Joomla 3中的多表查询,php,sql,joomla3.2,Php,Sql,Joomla3.2,我的SQL技能有点有限,但我能很好地解决如何查询问题。有没有更好的方法在一个操作中执行下面的SQL语句,而不是将其分成三个操作 $db = JFactory::getDbo(); $query = "SELECT email FROM xx_opencart_customer WHERE customer_id = '".$this->session->data['customer_id']."'"; $db->s

我的SQL技能有点有限,但我能很好地解决如何查询问题。有没有更好的方法在一个操作中执行下面的SQL语句,而不是将其分成三个操作

$db = JFactory::getDbo();
                $query = "SELECT email FROM xx_opencart_customer WHERE customer_id = '".$this->session->data['customer_id']."'";
                $db->setQuery($query);
                $results = $db->loadObjectList();
                foreach ($results as $t) {;
                }

                $db = JFactory::getDbo();
                $query = "SELECT id FROM xx_users WHERE email = '".$t->email."'";
                $db->setQuery($query);
                $results = $db->loadObjectList();
                foreach ($results as $t) {;
                }

                $db = JFactory::getDbo();
                $query = "SELECT group_id FROM xx_user_usergroup_map WHERE user_id = '".$t->id."'";
                $db->setQuery($query);
                $results = $db->loadObjectList();
                foreach ($results as $t) {;
                }
最终的结果是,我能够说出$t->group_id等于多少。

试试这个:

$db = JFactory::getDbo();
$query = "SELECT z.group_id 
          FROM #__opencart_customer x, #__users y, #__user_usergroup_map z 
          WHERE x.customer_id = ".
          $db->quote($this->session->data['customer_id']).
          " AND x.email = y.email AND y.id = z.user_id";
$db->setQuery($query);
$result = $db->loadResult();
对于单值结果,不需要使用
$db->loadObjectList()

对于表名,不要使用实际的dbprefix。改用
#
。通过这种方式,您可以从configuration.php更改表前缀,而无需更改查询。
另外,不需要设置
$db=JFactory::getDbo()每次。一次就够了

希望这有帮助。。
干杯

我添加了$db->quote函数,该函数还将转义输入以防止SQL注入attacks@Tzar请对多个插入也能这样做吗?我想在表1中插入值,检索最后一个_insert_ID(),然后将该值和其他值插入表2中。提前谢谢。@Daydah我想你也可以做多次插入。从你的评论来看,我不太清楚你到底想达到什么目的。@Tzar谢谢你的回复。我想在普通SQL中实现的是简单的,我可以演示如何使用Joomla quickfix[这可以在您的解决方案中使用JFactory格式完成吗?]:插入
jx_用户
name
username
密码
params
)值('Administrator2'、'admin2'、'd2064d358136996bd22421584a7cb33e:trd7TvKHx6dMeoMmBVxYmg0vuXEA4199','');插入到
jx_用户组用户映射中(
用户id
组id
)值(最后插入id(),'8');