2016-05-06 5 views
2

У меня есть сайт Joomla, на котором установлен пользовательский компонент. В этом компоненте я печатаю имена пользователей Joomla в таблицу html. И есть флажок, где я могу выбрать пользователей по имени.Заказать php echo output

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

Это нормально, но я хочу заказать имена пользователей. Ex. У меня есть 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

Вы можете указать свой код выбора mysql? – jakob

+0

Не забудьте [правильно избежать ваших значений здесь] (https://docs.joomla.org/Secure_coding_guidelines#Constructing_SQL_queries). – tadman

+0

Что значит? вставьте escape в эти запросы? –

ответ

1

Заказать ваши результаты с помощью функции FIELD в MySQL:

$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 
     ) 
+0

Я не хочу заказывать по имени пользователя, мне нужен смешанный заказ (указанный мной заказ) –

+0

Если я хочу заказать по столбцу, например registrationDate? –

+0

Измените свой вопрос на примере. – Spade

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; 
    } 
+0

ваш ответ решил мой другой вопрос :) –