Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.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查询_Php_Mysql_Joomla3.0 - Fatal编程技术网

Php 硬SQL查询

Php 硬SQL查询,php,mysql,joomla3.0,Php,Mysql,Joomla3.0,我有一个不寻常的SQL问题,我不太确定如何最好地解释,所以请容忍我。我有三个表格,一个是志愿者组织,一个是用户,另一个是用户详细信息 #Table 1# ## Name President Secretary Treasurer ---------- ABC 571 123 456 DEF 457 582 444 #Table 2# ## Id Name ---------- 571 Joe Blogs 123 Joanne Blogs #Table 3# ## Id Address Cit

我有一个不寻常的SQL问题,我不太确定如何最好地解释,所以请容忍我。我有三个表格,一个是志愿者组织,一个是用户,另一个是用户详细信息

#Table 1#
## Name President Secretary Treasurer
----------
ABC 571 123 456
DEF 457 582 444

#Table 2#
## Id Name
----------
571 Joe Blogs
123 Joanne Blogs

#Table 3#
## Id Address City
----------
571 123...... Somewhere
123 456..... Somewhere Else
我想做的是允许用户按照组织名称的顺序组合PDF地址标签,因此,他们可能会说,他们需要每个组织的总裁或总裁和秘书,因此,it将读取所有组织的总裁和秘书ID,并将他们加入到地址详细信息中,并按照组织的顺序进行组装。他们可以选择只做总统或总统和秘书,或上述任何组合。它必须按组织顺序排序,并按此顺序返回用户对象

比如说

ABC -> President
ABC -> Secretary
DEF -> President
DEF -> Secretary
我试过几种选择。一是,

$query  = $db->getQuery(true);
        $query->select($db->quoteName('a.name'));
        $query->select($db->quoteName($this->show_exec));
        $query->from($db->quoteName('#__agshows_shows', 'a'));
        $tableACount = 'b';
        $tableBCount = 'aa';
        foreach($this->show_exec as $column){
            $query->select($db->quoteName(array($tableACount . '.user_id', $tableACount . '.address_1', $tableACount . '.address_2', $tableACount . '.city', $tableACount . '.region', $tableACount . '.postal_code', $tableBCount . '.name')))
            ->join('LEFT', $db->quoteName('#__agshows_user_profile', $tableACount) . ' ON (' . $db->quoteName($tableACount . '.user_id') . ' = ' . $db->quoteName($column) . ')')
            ->join('LEFT', $db->quoteName('#__users', $tableBCount) . ' ON (' . $db->quoteName($tableBCount . '.id') . ' = ' . $db->quoteName($column) . ')');

            $tableACount ++;
            $tableBCount ++;
        }

        switch($this->show_sort) {

            case 'a.title':
                $query->order($db->quoteName('a.title') . ' ASC');
            break;

            case 'a.groupid':
                $query->order($db->quoteName('a.groupid') . ' ASC');
            break;

            default:
                $query->order($db->quoteName('a.title') . ' ASC');              
        }

        $db->setQuery($query);
        $show_users = $db->loadObjectList();
问题在于,当它通过foreach循环时,每个组织都会互相覆盖。我希望它是灵活的($this->show\u exec拥有一系列可供选择的列,即总统、秘书)

第二个选择是

if(!empty($this->show_exec)) {
        // Get the Show Exec user IDs.
        $query  = $db->getQuery(true);
        $query->select($db->quoteName($this->show_exec));
        $query->from($db->quoteName('#__agshows_shows'));
        $db->setQuery($query);
        $show_users = $db->loadAssocList();


        foreach ($show_users as $shows) {
            foreach ($shows as $key=>$value) {
                if($value != 0) {
                    $user_ids[]=$value;

                }
            }
        }
    }

$query = $db->getQuery(true);
    $query->select('a.*');
    $query->from($db->quoteName('#__agshows_user_profile') . ' AS a');

    // Join over the users names.
    $query->select('uc.name')
    ->join('LEFT', '#__users AS uc ON uc.id=a.user_id');

    $query->where('a.user_id IN ('. implode(',', $user_ids) . ')');

    $query->order($db->escape('a.city asc'));

    $db->setQuery($query);
    $recipients = $db->loadObjectList();
这一个的问题是$users\u id的顺序正确,但当它查询第二个表时,它没有用于排序的引用,只返回第二个表的顺序,而不是我想要的顺序

有没有一个干净的方法可以把所有的事情都做到一个

或者,是否有一种方法可以对第二个查询进行排序,以按照$user\u id数组的顺序返回结果

我希望这是有道理的


谢谢

我认为以下查询可能适合您:

    SELECT 
  * 
FROM
  (SELECT 
    o.name AS org_name,
    u1.name AS username,
    'president' AS `type`
  FROM
    org o 
    LEFT JOIN users u1 
      ON u1.`id` = o.`president` 
  UNION
  ALL 
  SELECT 
    o.name AS org_name,
    u1.name AS username,
    'secretary' AS `type`
  FROM
    org o 
    LEFT JOIN users u1 
      ON u1.`id` = o.`secretary` 
  UNION
  ALL 
  SELECT 
    o.name AS org_name,
    u1.name AS username,
    'treasurer' AS `type`
  FROM
    org o 
    LEFT JOIN users u1 
      ON u1.`id` = o.`treasurer`) AS a 
ORDER BY a.org_name ;
我假设users表的主键将用作organization表中president、secretary和treasurer列的外键


下面查询的输出将生成一个虚拟列“type”,您可以在代码中使用它来确定该特定用户在组织中的角色。此外,您还需要动态创建此查询,以便在只需要总裁、秘书、司库或它们的任意组合的情况下进行处理。

现在我只需要在Joomla使用它,如果您知道的话,这里是我的问题。对不起,我不认识乔姆拉:(