Mysql SELECT не работает

#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, я понимаю практику, но не теорию.