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