订购php echo输出

时间:2016-05-06 17:11:10

标签: php html mysql joomla

我有一个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;
}

提前感谢您的帮助:)

2 个答案:

答案 0 :(得分:1)

使用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 expression,例如:

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

答案 1 :(得分:1)

见下文。您需要添加$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;
    }