Size: a a a

2021 August 20

T

Talant in MySQL
Пытаюсь сделать такой поиск пользователей.
источник

s

svasta☦️ in MySQL
Всем привет, срочно нужна помощь с запросом, почему он возвращает неправильное кол-во записей
SELECT tu.id,
      tu.firstname,
      tu.lastname,
      tu.region,
      IF(r.name IS NOT NULL, r.name, 'user') as role_name,
      if(r.name IS NOT NULL, UPPER(LEFT(r.name, 1)), 'U') as role
FROM tbl_user tu
        LEFT JOIN tbl_users_groups_permissions tugp ON tugp.user_id = tu.id
        LEFT JOIN tbl_users_groups_relations tugr ON tugr.user_id = tu.id
        LEFT JOIN roles r ON tugp.role_id = r.id
WHERE tu.id = ?
 AND tugr.group_id = ?
 AND tu.is_delete = '0'
 AND tu.is_active= '1'
источник

S

Syntax Highlight Bot in MySQL
источник

s

svasta☦️ in MySQL
user_id, group_id, role_id
1377,3,1
1261,9,1
1337,13,1
1337,1,1

это то что есть в таблице user_group_permissions
источник

S

Syntax Highlight Bot in MySQL
источник

s

svasta☦️ in MySQL
1337,Roman,Mizin,western,admin,A
1337,Roman,Mmizin,western,admin,A
а это респонс запроса
источник

s

svasta☦️ in MySQL
парни прошу, помогите
источник

s

svasta☦️ in MySQL
могу дать ddl таблиц
источник

OM

Oleg Makarikhin in MySQL
мне кажется что вы неправильно вытащили   AND tugr.group_id = ? в секцию вхере, при том что tugr джоинится через лефт.
вы по сути фильтруете по tugr.group_id а не обогащаете с помощью лефт, если в tugr нет записи для вашего юзера, вы получите в group_id нулл и не показываете её в результате.
если в этом проблема, занесите условие в секцию лефт джоин через энд.

хотя еще есть вариант что вы ищете такие записи, для которых нет в tugr записей, и фильтруете по tugr.group_id = null , но это некомильфо, потому что надо is null
источник

s

svasta☦️ in MySQL
как это сделать?
источник

OM

Oleg Makarikhin in MySQL
FROM tbl_user tu
        LEFT JOIN tbl_users_groups_permissions tugp ON tugp.user_id = tu.id
        LEFT JOIN tbl_users_groups_relations tugr ON tugr.user_id = tu.id   AND tugr.group_id = ?
        LEFT JOIN roles r ON tugp.role_id = r.id
WHERE tu.id = ?
 AND tu.is_delete = '0'
 AND tu.is_active= '1'
источник

S

Syntax Highlight Bot in MySQL
источник

OM

Oleg Makarikhin in MySQL
а вообще я тут гадаю из опыта типичных ошибок, а что вообще вам надо - яхз
источник

s

svasta☦️ in MySQL
все равно отдало две записи
источник

s

svasta☦️ in MySQL
ну типо две записи это две группы в которых этот юзер админ (записи из таблицы tbl_user_group_permissions)
источник

s

svasta☦️ in MySQL
SELECT tu.id,
      tu.firstname,
      tu.lastname,
      tu.region,
      IF(r.name IS NOT NULL, r.name, 'user') as role_name,
      if(r.name IS NOT NULL, UPPER(LEFT(r.name, 1)), 'U') as role,
      tugp.group_id as group_perm,
      tugr.group_id as group_rel
FROM tbl_user tu
   LEFT JOIN tbl_users_groups_permissions tugp ON tugp.user_id = tu.id AND tugp.group_id = ?
   LEFT JOIN tbl_users_groups_relations tugr ON tugr.user_id = tu.id AND tugr.group_id = ?
   LEFT JOIN roles r ON tugp.role_id = r.id
WHERE tu.id = ?
 AND tugr.group_id = ?
 AND tu.is_delete = '0'
 AND tu.is_active= '1'
источник

S

Syntax Highlight Bot in MySQL
источник

s

svasta☦️ in MySQL
вот так оно вроде как работает
источник

V

Vladislav in MySQL
о хоспаде)
источник

s

svasta☦️ in MySQL
Ага
источник