Центр пользователя  |  Ваши сообщения  |  FAQ
Форум поддержки phpBB » Общие » PHP и MySQL

Вывод списка пользователей с отметками, есть ли они в группе

Обсуждение вопросов, связанных с разработкой web-систем

Сообщение 09 авг 2011, 15:21

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

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

Как у меня сделано всё сейчас (упростил, о чём написал выше):
Код: выделить все
echo "<table>";

$query = "SELECT f0rums_users.username, f0rums_users.user_id, f0rums_profile_fields_data.pf_skype
FROM f0rums_users
LEFT JOIN f0rums_profile_fields_data
ON f0rums_users.user_id=f0rums_profile_fields_data.user_id
WHERE f0rums_user_group.user_id!=2
ORDER BY f0rums_users.user_regdate DESC";

$result = mysql_query($query);

while ($row = mysql_fetch_array($result)) :
echo "<tr>";
echo "<td>" . $row['username'] . "</td>";
echo "<td>" . $row['pf_skype'] . "</td>";
echo "</tr>";
endwhile;

echo "</table>";
То есть, как Вы сейчас видите, просто выдираются нужные данные из одной таблицы, а также данные из другой таблицы, которая просто "лефтджойнится" по уникальному идентификатору (user_id). В строчке каждого user_id уже отображается, есть ли у них заполненное поле pf_skype или нет. Всё хорошо.

Теперь перейдём к моей проблеме. Мне не понятно как сделать в таблице колонку, в которой бы отображалось, в группе пользователь или нет (ID группы = "9"). Данные об отношении пользователей к тем или иным группам содержатся в таблице f0rums_user_group.

Пути решения проблемы:
а) Как-то сделать так, чтобы к имеющейся выборке кроме данных таблицы f0rums_profile_fields_data присоединялись и данные таблицы f0rums_user_group. Загвоздка в том, что в f0rums_user_group может быть несколько строк с одинаковым значением user_id, а мне оттуда нужны только те строки с user_id, у которых group_id="9". Как только в моей выборке в каждой строке с уникальным идентификатором user_id появится поле с соответствующим ID группы "9" (то есть, поле, в котором есть девятка, или вообще ничего нет) — всё, я эти данные уже без проблем отображу, так как получится с одной выборки цельная аккуратная таблица, где всё расположено чин чином.
б) Сделать вторую выборку, а затем уже как-то сработаться с имеющимися двумя выборками. Вторую выборку я уже набросал:
Код: выделить все
$query2 = "SELECT group_id, user_id
FROM f0rums_user_group
WHERE user_id!=2 AND group_id='9'
ORDER BY user_id DESC";

$result2 = mysql_query($query2);
Но тогда встаёт вопрос, как выводить. Сделать как-то сверку надо (не ясно как):
Код: выделить все
if($row['user_id'] = ____найти,_есть_ли_это_значение_user_id_в_$result2____) {
echo "<td>пользователь в группе</td>";

Надеюсь, я понятно всё описал. Старался.


UPDATED

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

Таблица 1: f0rums_users
Код: выделить все
----------------------
| user_id | username |
----------------------
| 1       | abc      |
| 2       | asdf     |
| 3       | xcdf     |
| 4       | ugjds    |
----------------------

Таблица 2: f0rums_profile_fields_data
Код: выделить все
----------------------
| user_id | pf_skype |
----------------------
| 1       | abc1     |
| 2       | awsd     |
| 3       | xfds     |
| 4       | ugj      |
----------------------

Таблица 3: f0rums_user_group
Код: выделить все
----------------------
| user_id | group_id |
----------------------
| 1       | 2        |
| 1       | 3        |
| 2       | 2        |
| 2       | 4        |
| 2       | 5        |
| 2       | 9        |
| 3       | 2        |
| 3       | 4        |
| 4       | 4        |
| 4       | 9        |
----------------------

Из всего этого надо сделать такую выборку:
Код: выделить все
--------------------------------------------
| user_id | username | pf_skype | group_id |
--------------------------------------------
| 1       | abc      | abc1     |          |
| 2       | asdf     | awsd     | 9        |
| 3       | xcdf     | xfds     |          |
| 4       | ugjds    | ugj      | 9        |
--------------------------------------------
Shtack

 

Вернуться в PHP и MySQL

 


  • Похожие темы
    Ответов
    Просмотров
    Последнее сообщение

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

Форум поддержки phpBB
2008 - 2017 © BB3x.ru - русская поддержка форума phpBB3
Создано на основе phpBB® Forum Software © phpBB Group
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама