Задать вопрос
@noname95

Как правильно составить сложный sql запрос?

Здравствуйте. Никак не могу составить запрос, чтобы обойтись без "костылей", помогите пожалуйста :)

Имеется:
  • Таблица пользователей id, name, moderator_id, group_id
  • Таблица новостей id, name, user_id, text, active
group_id 1 = пользователи, group_id 2 = модераторы
moderator_id = id пользователя который назначен в качестве модератора для пользователя

Моя задача в личном кабинете модератора вывести все новости только тех пользователей, для которых я (модератор при просмотре своего ЛК) назначен в качестве модератора.

Пробовал так, костыль конечно и тот, безуспешный:
$query_tmp = "SELECT id FROM users WHERE group_id='1' AND redactor='".$my['id']."' ORDER BY id DESC";
$query = mysql_query($query_tmp);

$query_tmp_listnews = '';
while ($res_user = mysql_fetch_array($query)) {
	$query_tmp_listnews .= "(SELECT * FROM news WHERE user_id='".$res_user['id']."' AND active='1') + ";
}

$query_tmp_news = 'SELECT('.$query_tmp_listnews.') ORDER BY id DESC';
$iquery = mysql_query($query_tmp_news);
  • Вопрос задан
  • 118 просмотров
Подписаться 1 Простой 2 комментария
Пригласить эксперта
Ответы на вопрос 2
@xtress
Web-dev
redactor='".$my['id']."'

Какой redactor? Откуда redactor? БД и таблица пользователей ничего не знает о данной "колонке".

Что за, м-м-м, интересные вещи творятся во втором и 3м запросах? У вас итоговый запрос выглядит как
SELECT (SELECT() + SELECT() + SELECT() ...)
Зачем это всё?

Я конечно понимаю, что это от незнания, но...
В общем, с mysql_query я давно не работал, поэтому обойдусь просто направлением:
1) Строки с 5 и до конца удаляем;
2) While или чем угодно получаем все id из первого запроса;
3) Читаем мануал по https://dev.mysql.com/doc/refman/8.0/en/comparison... ;
4) составляем запрос с использованием IN и всех id новостей;
5) Выдёргиваем все данные одним запросом без, как вы выразились, костылей;

p.s.
ну или используем JOIN как вам посоветовали выше.
Ответ написан
Комментировать
Может такой вариант
select id from art where user_id in (select id from users where moderator_id = 2)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы