powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Прошу помощи с запросом на выборку
11 сообщений из 11, страница 1 из 1
Прошу помощи с запросом на выборку
    #39605487
mr. Shu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
Существует следующая схема:


Каждой записи в таблице people может соответствовать до 5 записей в таблице skills. Необходимо выбрать те записи в таблице people, которым соответствуют, например, три определенные записив таблице skills причем у одной конкретной записи из этих трех в поле main значение True.

Например, если какой-либо записи в таблице people соответсвуют три записи в skills с id 1, 3 и 4 при этом у записи с id 1 в поле main значение true, то эту запись из people возвращаем.

Боже упаси просить написать такой запрос за меня, но хотя бы укажите направление. Поначалу казалось, что все просто, а в итоге весь мозг себе сломал.
...
Рейтинг: 0 / 0
Прошу помощи с запросом на выборку
    #39605494
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT people.id, people.pName
FROM people, skills
WHERE people.id = skills.pID
  AND skills.id IN (1, 3, 4)
GROUP BY people.id -- , people.pName
HAVING COUNT(/* DISTINCT */ skills.id) = 3
   AND SUM(skills.main = 'true') > 0
...
Рейтинг: 0 / 0
Прошу помощи с запросом на выборку
    #39605588
mr. Shu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, разобрался как делать подобные запросы.
Есть еще вопрос. Конструкция ниже сработает, даже если main будет равен true у любой записи из skills, а также если значение true будет у нескольких.

Akina
Код: sql
1.
AND SUM(skills.main = 'true') > 0



А можно ли сделать, так, что проверка будет только на единственный флаг и только у записи в skills с конкретным id
...
Рейтинг: 0 / 0
Прошу помощи с запросом на выборку
    #39605594
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mr. Shuможно ли сделать, так, чтоМожно.

Если нет дублирования записей по (id, main), то
mr. Shuна единственный флаг
Код: sql
1.
AND SUM(skills.main = 'true') = 1


mr. Shuна единственный флаг и только у записи в skills с конкретным id
Код: sql
1.
AND SUM(skills.main = 'true' AND skills.id = 4) = 1
...
Рейтинг: 0 / 0
Прошу помощи с запросом на выборку
    #39605905
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina
Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT people.id, people.pName
FROM people, skills
WHERE people.id = skills.pID
  AND skills.id IN (1, 3, 4)
GROUP BY people.id -- , people.pName
HAVING COUNT(/* DISTINCT */ skills.id) = 3
   AND SUM(skills.main = 'true') > 0



любишь ты шизонутые group by писать ...
...
Рейтинг: 0 / 0
Прошу помощи с запросом на выборку
    #39605906
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mr. ShuСпасибо, разобрался как делать подобные запросы.
Есть еще вопрос. Конструкция ниже сработает, даже если main будет равен true у любой записи из skills, а также если значение true будет у нескольких.

Akina
Код: sql
1.
AND SUM(skills.main = 'true') > 0



А можно ли сделать, так, что проверка будет только на единственный флаг и только у записи в skills с конкретным id


это не лучший способ.

лучше написать несколько под запросов с EXISTS...
...
Рейтинг: 0 / 0
Прошу помощи с запросом на выборку
    #39605938
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivлюбишь ты шизонутые group by писать ...А что такого особо шизанутого в группировке по одному полю?

MasterZivлучше написать несколько под запросов с EXISTS...Напиши, а? посмотреть охота на то, что получится. А особенно - оценить на предмет унификации...
...
Рейтинг: 0 / 0
Прошу помощи с запросом на выборку
    #39608584
Не стал новую тему создавать. У меня тоже вопрос по запросу.
Я начинающий, сильно не пинайте.

Есть схема.
Требуется сделать выборку всех записей из `direction`, причем в поля `id_user` и `id_user_opr` необходимо подставить ФИО (`user`.`fio`) соответствующего пользователя из таблицы `user`.

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

Например, если подставлять `user`.`fio` только в `direction`.`id_user` тут проблем не возникает:


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT id_direction, 
            direction_name, 
	    fio as fio_dir,
            id_user_opr,
	    limit_ohr,
   	    opr_off,
	    note
	FROM `direction`
        JOIN user USING(id_user) 



За место `direction`.`id_user` в результат вставляется фамилия юзера `user`.`fio`.
Пробую такую конструкцию:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
SELECT id_direction, 
		direction_name, 
		fio as fio_dir,
                fio as fio_opr,
                id_user_opr,
		limit_ohr,
		opr_off,
		note
		FROM `direction` as `d1`

        LEFT JOIN `user` as `u1` ON `u1`.`id_user` = `d1`.`id_user`
        LEFT JOIN `user` as `u2` ON `u2`.`id_user` = `d1`.`id_user_opr`



и она говорит "#1052 - Column 'fio' in field list is ambiguous", с чем даже я, начинающий, согласен, так как два поля fio в запросе даже меня смущает.
Натолкните меня в правильное русло... Как правильно построить хороший запрос? Может тут только вложенный запрос поможет?
...
Рейтинг: 0 / 0
Прошу помощи с запросом на выборку
    #39608636
Алексей Мальцев,

Получилось! Ура!

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT direction_name,
	u1.fio as fio_dir,
        u2.fio as fio_opr,
        limit_ohr,
        opr_off,
        note
FROM direction 

INNER JOIN user as u1 ON (direction.id_user = u1.id_user)
INNER JOIN user as u2 ON (direction.id_user_opr = u2.id_user)
...
Рейтинг: 0 / 0
Прошу помощи с запросом на выборку
    #39608736
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Мальцев , совет на будущее. Если источником данных в запросе являются хотя бы две таблицы (даже если это две копии одной и той же таблицы) - указывайте алиас таблицы для КАЖДОГО поля, и в любой секции (под)запроса. Даже если одноимённых полей в других таблицах нет. А то структура данных иногда изменяется, и если у вроде бы уникального по имени поля вдруг в соседней таблице появится однофамилец - есть шанс из-за отсутствия в тексте запроса горсти в общем бесплатных байтов на пустом месте огрести неожиданно плюху. Оно надо?
...
Рейтинг: 0 / 0
Прошу помощи с запросом на выборку
    #39608864
Akina,

Понял, спасибо!
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Прошу помощи с запросом на выборку
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]