订购php echo输出


Order php echo output

我有一个Joomla站点,在那里安装了一个自定义组件。在该组件中,我将Joomla用户名打印到一个html表中。还有一个复选框,我可以在其中按名称选择用户。

<option value="<?php echo $allUser->id; ?>" <?php echo $selected; ?> ><?php echo $allUser->name; ?></option>
<?php
}
?>
</select>
<?php } ?>

这还可以,但我想订购用户名。例:我有3个注册用户:

1-Joe
2-Katie
3-Bill

我想指定我显示的顺序,例如:

1-Bill
2-Joe
3-Katie

默认情况下有按注册ID排序(我认为)。做这件事的正确方法是什么?如何做到这一点?

public function getUsersById($id = NULL, $select = NULL)
{
    $db = JFactory::getDbo();
    $query  = $db->getQuery(true);
    $query->select($select);
    $query->from('#__users AS u');
    $query->join('LEFT',' #__user_usergroup_map AS ugm ON u.id=ugm.user_id');
    $query->where('ugm.group_id!="8"');
    $query->where('u.id="'.$id.'"');
    $db->setQuery($query);
    $row = $db->loadObjectList();
    return $row;
}

感谢您提前提供的帮助:)

使用MySQL中的FIELD函数排序结果:

$query->join('LEFT'," #__user_usergroup_map AS ugm ON u.id=ugm.user_id
                     order by FIELD(u.name, 'Bill', 'Joe', 'Katie')");

对代码进行上述更改,以实现问题中指定的自定义订单。

如果您有更复杂的订单规范,您也可以利用CASE表达式,例如:

ORDER BY (
           CASE name
           WHEN 'Bill' THEN 0
           WHEN 'Joe' THEN 1
           WHEN 'Katie' THEN 2
           END
         )

请参阅下文。您需要在$query->order行中添加适当的订购信息。

 public function getUsersById($id = NULL, $select = NULL)
    {
        $db = JFactory::getDbo();
        $query  = $db->getQuery(true);
        $query->select($select);
        $query->from('#__users AS u');
        $query->join('LEFT',' #__user_usergroup_map AS ugm ON u.id=ugm.user_id');
        $query->where('ugm.group_id!="8"');
        $query->where('u.id="'.$id.'"');
        $query->order('**column you want to order by** **ASC/DESC**');
        $db->setQuery($query);
        $row = $db->loadObjectList();
        return $row;
    }