0

我的 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 等于什么。

4

1 回答 1

2

试试这个:

$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();每次都设置。一次就够了!

希望这会有所帮助.. 干杯!

于 2014-01-20T19:12:08.830 回答