Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите с SQL-запросом

122 122 Ученик (102), на голосовании 1 год назад
Нужно получить список туристов, которые ходили в походы со своим тренером в качестве инструктора.

(Trener BIT и Instructor BIT показывают является ли турист тренером или инструктором 1-да 0-нет)
Голосование за лучший ответ
Юля Димир Мастер (2213) 1 год назад
Похоже что ты вообще не знаешь SQL.
Это базовый запрос.

Тебе надо обратиться к базе, подключится.
Дальше выбрать базу и сделать выборку по 2 столбцам, т.е. простое условие.
 SELECT * FROM users 
Получили всех пользователей из таблицы users:
Тебе нужны конкретные колонки, вызываются так.
 SELECT name, name2 FROM title 

Затем надо отфильтровать, по нужному параметру.
Для этого есть WHERE и операторы предикаты AND, OR, NOT, LIKE, BETWEEN, IS, IN, ключевое слово NULL, операторы сравнения и равенства (<, >, =).
 SELECT * FROM title
WHERE action = 1;
Выборка всех полей, в таблице title. И фильтрация по полю action, если будет 1.

Запрос реально бичовский, что ты будешь делать, когда будут перекрёстные.
sql очень простой, в это его и фишка, есть другие, БД.
Они не такие популярные из-за сложности обращения.
122 122Ученик (102) 1 год назад
Ну если это такой лёгкий запрос давай напиши, что написать в условии
Юля Димир Мастер (2213) 122 122, ага, на понт дурон ищи. Думай. Подсказку дала.
Юля ДимирМастер (2213) 1 год назад
Примеры: Сайт 1, сайт 2, сайт 3, сайт 4 , сайт 5, сайт 6, сайт 7

6ка самый удачный. Есть проф. я тут учи
Юля ДимирМастер (2213) 1 год назад
маил групп, вот что реальный бич
https://proglib.io/p/osnovnye-sql-komandy-i-zaprosy-s-primerami-kotorye-dolzhen-znat-kazhdyy-razrabotchik-2022-04-14 Вот тут почитай. https://sql-language.ru/primery-sql/select-sql.html Этот можешь посмотреть.
122 122Ученик (102) 1 год назад
Лучше бы логику запроса бы подсказала, синтаксис я без тебя знаю
Юля Димир Мастер (2213) 122 122, ты угараешь. Чего тебе не хватает. У тебя есть таблица (как называется она) в ней поле/поля( которые нужны). Тебе остается сделать выборку из этой таблице, по этим полям. Сделать можешь? Получил эту выборку, пишешь условие. Причем если 2 таблицы (2 поля, которые по сути одинаковый результат дают, можно выкинуть из запроса один столбец "т.к. это лишняя нагрузка"). Запросто пишется просто, у тебя поле, в котором есть 1 или 0, или true/false. Тебе достаточно сравнить используя WHERE, имя поля и условие.
Юля ДимирМастер (2213) 1 год назад
С аналогией активных пользователей.
Есть база, таблица пользователи, в которой есть колонка содержащий статус.
offline/active Такое лучше в бит переводить 0 или 1.
 SELECT * FROM users WHERE status = active; 
Такой запрос и выведет всех активных.
Юля ДимирМастер (2213) 1 год назад
условие выборки Вот и весь запрос простой.
 SELECT названия_нужных_полей FROM название_таблицы WHERE  
Выборка из нескольких таблиц (пользователи и продукт)
 SELECT * FROM users, productsowner_id 
Тут выбрали 2 таблицы, по условию ищем все продукты с id, который совпадает с id таблицы users. Не знаю как еще объяснить. user.** это таблица ** -> id это поле с id. products.****_** таблица products, поле .owner_id . Условие если id пользователя = (равно) владельцу_id @owner_id оно выводится.
Точно так же и у тебя по задаче, возможно еще одна таблица есть, просто указываешь ее.
Твой запрос изменится на
 SELECT * FROM users, products, fav WHERE users.id = products.owner_id AND fav.owner_id 
Тебе здесь надо соединить первое и последнее и будет твой запрос.
Evgeny Мастер (1475) 1 год назад
Не уверен по поводу оптимальности но я бы попытался применить такой вот запрос

 SELECT DISTINCT 'Turist'.'IDTurist' 
FROM 'Turist'
INNER JOIN 'TuristVGruppaSekcii' on 'TuristVGruppaSekcii'.'ID_Turist'='Turist'.'IDTurist'
INNER JOIN 'TuristVGruppaPohoda' on 'TuristVGruppaPohoda'.'instructor'='TuristVGruppaSekcii'.'Trener' AND 'TuristVGruppaPohoda'.'ID_Turist'='Turist'.'IDTurist'
WHERE 1;

Человеческим языком написано следующее
Туристов из таблицы туристы которые состоят в секциях
Для каждой такой пары выбираем походы в которых участвовал как тренер так и турист.
Каждый результат печатаем один раз.
122 122Ученик (102) 1 год назад
Спасибо сейчас проверю
Evgeny Мастер (1475) 122 122, дайте знать если получится.
EvgenyМастер (1475) 1 год назад
А, прости я не верно понял схему проекта.


Грубо говоря есть туристы а есть турист тренер или турист инструктор по отношению к группе или походу.

Я не обратил внимания что это boolean. Сейчас сгенерю новый запрос.
EvgenyМастер (1475) 1 год назад
Логика выбора такая :

Из всех СписковУчастниковСекций (С) и СписковУчастниковПоходов (П) выбрать такие где турист был и тренером и инструктором одновременно.

для каждой такой С выбрать всех участников и выбрать только тех которые при этом были участниками П

SELECT DISTINCT Participant.ID _Turist FROM TuristVGRuppaPohoda P
LEFT JOIN TuristVGruppaSekcii S
ON P.ID _Turist = S.ID_Turist AND Trener=1 and Instructor=1
LEFT JOIN TuristVGruppaPohoda Participants
ON P.ID _Pohod = Participants.ID _Pohod
INNER JOIN TuristVGruppaSekcii Sektant
ON S.ID _GruppaSekcii = Sektant.ID _GruppaSekcii AND Participants.ID _Turist = Sektant.ID _Turist
WHERE 1;
Похожие вопросы