#mysql #join
#mysql #Присоединиться
Вопрос:
У меня есть таблицы:
Пользователи
ID | RANK | NAME | EMAIL | PASS
01 | 1 | Foo | foo@bar.com | $06$uhAMXXZowVIDQ.ZR1gky.u3f/UBkLW8Kd8cbyDt2eNx1qnZH2AUmW
разрешить
ID | RANK | STEP
01 | 1 | 1
02 | 1 | 2
03 | 1 | 3
04 | 2 | 1
05 | 4 | *
И мне нужно знать все разрешенные шаги из пользовательского рейтинга.
Мой код:
SELECT users.*, allow.step AS allow_step
FROM users AS users LEFT JOIN allow ON users.rank = allow.rank
Но выбран только один шаг.
Спасибо за помощь!
Комментарии:
1. Разве вы не можете просто использовать два отдельных запроса?
Ответ №1:
SELECT u.*, GROUP_CONCAT(a.step) allow_step
FROM users u
LEFT JOIN allow a
ON u.rank = a.rank
GROUP BY a.rank_id
Это должно выбрать список шагов, разделенных запятыми. Что-то вроде 1,2,3
.
Если вам нужно упорядочить объединенные значения, измените первую строку запроса на:
SELECT u.*, GROUP_CONCAT(a.step ORDER BY a.step) allow_step
Ответ №2:
Данные SQL и данные выдадут три строки — и даже без использования ЛЕВОГО СОЕДИНЕНИЯ (достаточно простого соединения).
Вы не показываете и не описываете, как вы запускаете SQL; вам нужно извлекать несколько строк в цикле или использовать какой-либо метод «извлечения всех строк»?
Комментарии:
1. Если users.rank является внешним ключом, не допускающим нули, которые разрешают ссылки.rank , тогда внутреннее соединение будет работать нормально. Если нет отношения FK, почему бы и нет? Если вы разрешаете NULL в users.rank — почему вы создали себе проблемы? (Почему бы не предоставить подходящий по умолчанию, ненулевой, ранг для использования.)
2. Я новичок в бразильском разработчике mysql, я понимаю практику, но не теорию.