Codeigniter - Возвращает членов, связанных с конкретным местоположением

0

Я создаю программное обеспечение, в котором руководитель хора может управлять несколькими хорами.

Я пытаюсь вернуть всех участников, связанных с определенной хоровой группой. Поэтому, когда руководитель хора выбирает конкретное место хора, он видит всех участников, связанных с этим местом.

У меня есть таблица aauth_users и таблица choir_locations_to_users в базе данных MySQL.

таблица aauth_users содержит все данные, относящиеся к каждому члену хора:

Изображение 174551

таблица choir_locations_to_users представляет собой отдельную таблицу, в которой перечислены идентификатор пользователя и идентификатор местоположения хора.

Изображение 174551

Я выполняю запрос, чтобы получить необходимые данные, необходимые для отображения всех участников. например, имя участника, аватар и т.д. для отображения на странице расположения хора.

Параметр $ id в функции - это идентификатор местоположения хора.

public function get_choirlocation_members($id) {

        // $query = 'SELECT aauth_users.full_name, aauth_users.avatar, aauth_users.last_login, choir_location_to_users.location_id FROM aauth_users, choir_location_to_users WHERE aauth_users.id = choir_location_to_users.user_id ';
        $this->db->select('aauth_users.full_name, aauth_users.avatar, aauth_users.last_login, aauth_users.id, choir_location_to_users.location_id');
        $this->db->from('aauth_users, choir_location_to_users');
        $this->db->where('aauth_users.id = choir_location_to_users.user_id');
        $this->db->order_by('aauth_users.last_login', 'DESC');
        $members = $this->db->get();

        foreach ($members->result() as $row) {
            if($row->location_id == $id){
                return $members;
            }
        }

    }

Запрос выше возвращает следующие результаты: Изображение 174551

Проблема в функции после запроса, которая, кажется, возвращает все элементы, а не только элементы, связанные с этим местоположением. как и когда я делаю другой foreach в моем View File с результатом, я все еще вижу всех участников.

foreach ($members->result() as $row): ?>
    <li>
        <img class="profile-user-img img-responsive img-circle" src="<?php echo BASE_URL.'uploads/user/'.$row->avatar ?>" alt="User Image">
        <a class="users-list-name" href="#"><?php echo $row->full_name ?></a>
        <span class="users-list-date">Last Login: <?php echo date ( "d.m.Y " , strtotime ($row->last_login  )); ?></span>
    </li>
    <?php endforeach; ?> 

Я был бы очень признателен за любую помощь, чтобы указать, где я могу ошибаться при попытке отфильтровать результаты запроса, чтобы показать только участников, связанных с определенным местоположением хора на основе идентификатора местоположения.


ОБНОВЛЕНИЕ Anwser из @Dinesh Али здесь не работает, вот что у меня есть:

Я протестировал новый запрос на присоединение, который вы предложили в phpMyAdmin, и вот результат:

Изображение 174551

Как вы видите, он возвращает правильные данные в таблицу результатов, и это хорошо, поэтому я добавил предложенную вами функцию следующим образом:

public function get_choirlocation_members($id) {

    $this->db->select('aauth_users.full_name, aauth_users.avatar, aauth_users.last_login, aauth_users.id, choir_location_to_users.location_id');
    $this->db->from('aauth_users');
    $this->db->join('choir_location_to_users', 'aauth_users.id = choir_location_to_users.user_id');
    $this->db->where('aauth_users.id = choir_location_to_users.user_id');
    $this->db->order_by('aauth_users.last_login', 'DESC');
    $members = $this->db->get()->result();



    if(isset($members) && count($members) > 0){
      return $members;      
    }else{
       return false;
    }  

}

Затем в моем представлении File я использую следующее, чтобы показать каждого пользователя как элемент списка LI:

  foreach ($members as $row): ?>



        <li>
            <img class="profile-user-img img-responsive img-circle" src="<?php echo BASE_URL.'uploads/user/'.$row->avatar ?>" alt="User Image">
            <a class="users-list-name" href="<?php echo BASE_URL.'administrator/user/view/'.$row->id ?>"><?php echo $row->full_name ?></a>
            <span class="users-list-date">Last Login: <?php echo date ( "d.m.Y " , strtotime ($row->last_login  )); ?></span>
        </li>


<?php endforeach; ?>  

Но каждый пользователь все еще показывает, что у меня есть 3 пользователя, и у меня есть только один пользователь, связанный с каждым местоположением, поэтому я ожидаю увидеть только один результат в представлении?

Теги:
codeigniter
foreach

2 ответа

1
Лучший ответ

Вы не можете получить данные из двух таблиц так, как вы пытаетесь это сделать.

Вы должны использовать join() для этого подробнее

 public function get_choirlocation_members($id) {

    $this->db->select('aauth_users.full_name, aauth_users.avatar, aauth_users.last_login, aauth_users.id, choir_location_to_users.location_id');
    $this->db->from('aauth_users');
    $this->db->join('choir_location_to_users', 'aauth_users.id = choir_location_to_users.user_id');
    $this->db->where('aauth_users.id = choir_location_to_users.user_id');
    $this->db->order_by('aauth_users.last_login', 'DESC');
    $members = $this->db->get()->result();

Когда вы используете join() нет необходимости проверять местоположение с помощью цикла и условия, потому что join() делает эту работу за вас

Теперь сначала проверьте $members пусто или нет

    if(isset($members) && count($members) > 0){
      return $members;      
    }else{
       return false;
    }  

}
  • 0
    Привет @Danish Спасибо за ваше любезное предложение, однако это не сработало, оно все еще возвращает всех участников? Я обновлю свой Вопрос с результатами.
  • 0
    @BrianRevie Вы использовали $this->db->where('choir_locations_to_users.location_id', $id) в своем запросе?
Показать ещё 1 комментарий
1

Попробуй это,

public function get_choirlocation_members($id) {

        // $query = 'SELECT aauth_users.full_name, aauth_users.avatar, aauth_users.last_login, choir_location_to_users.location_id FROM aauth_users, choir_location_to_users WHERE aauth_users.id = choir_location_to_users.user_id ';
        $this->db->select('aauth_users.full_name, aauth_users.avatar, aauth_users.last_login, aauth_users.id, choir_location_to_users.location_id');
        $this->db->from('aauth_users');
        $this->db->join('choir_location_to_users','aauth_users.id = choir_location_to_users.user_id','inner');
        //$this->db->where('aauth_users.id = choir_location_to_users.user_id');
        $this->db->order_by('aauth_users.last_login', 'DESC');
        $members = $this->db->get();

        foreach ($members->result() as $row) {
            if ($row->location_id == $id) {
                return $members;
            }
        }
    }
  • 0
    Здравствуйте @ M.Hemant Большое спасибо за любезно предложенный ответ, к сожалению, он не сработал. Он по-прежнему вернул всех пользователей, а не одного пользователя, которого я ожидал увидеть :(

Ещё вопросы

Сообщество Overcoder
Наверх
Меню