2016-01-27 2 views
0

Так что я пытаюсь извлечь все user_id из таблицы users-events, где event_id равен переданной переменной (предположим, что на данный момент это 2).Запросы PHP и MySQL, использующие значения в других таблицах

В базе данных на данный момент зарегистрировано 2 идентификатора этого события, которые равны 1 и 2.

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

Любая помощь будет очень полезна!

function showregisteredplayers($id){ 

$eventq = mysql_fetch_assoc(mysql_query("SELECT user_id FROM `users-events` WHERE event_id = '".$id."'")); 
$rosterq = mysql_query("SELECT username FROM `users` WHERE `user_id` = '".$eventq['user_id']."'"); 

    while($player = mysql_fetch_assoc($rosterq)){ 
    echo(" 
     <tr> 
      <td>".$player['username']."</td> 
     </tr> 
    "); 
    } 
} 

ответ

1

Используйте следующий запрос, а затем убейте свой первый.

SELECT username FROM `users` WHERE `user_id` IN 
(
    SELECT user_id FROM `users-events` WHERE event_id = 5 
) 

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

5, очевидно, просто пример, используйте $id там correctly.

+1

Ответ ниже лучше –

1

Почему бы не использовать JOIN?

SELECT username 
FROM `users` AS u 
INNER JOIN `users-events` AS ue ON u.user_id = ue.user_id 
WHERE event_id = ? 

Несколько советов:

  1. Не используйте mysql_ функции, потому что осуждаются
  2. использовать подготовленные запросы, то вам нужно всего лишь перебрать выполнить метод, посмотрите на Example 3 in this link (пример из php.net с использованием mysqli)
Смежные вопросы