我有一个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;
}
提前感谢您的帮助:)
答案 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;
}