что не так с этим MySQL присоединиться? - PullRequest
0 голосов
/ 11 марта 2012
SELECT p1.userid, p1.username, p2.lids 
        FROM VB_user p1
        LEFT JOIN AB_judge_perm p2 on p1.userid = p2.userid
        WHERE p1.membergroupids LIKE '".19.",%'
        OR p1.membergroupids LIKE '%,".19."'
        OR p1.membergroupids LIKE '%,".19.",%'
        OR p1.membergroupids = '".19."'

Я думаю p1.membergroupids не очень хорошо работает с соединениями? Если я удалю условные выражения p1.membergroupids, запрос будет работать так, как я хотел, за исключением того, что я хочу, чтобы он показывал только пользователей, входящих в группу 19, то есть LIKE s. p1.membergroupids является многозначным атрибутом.

1 Ответ

0 голосов
/ 11 марта 2012

Как указал @muistooshort, вы должны переместить свои членские группы в таблицу соединений многие-ко-многим, и эта проблема исчезнет. Ужасно ненормализованные структуры, подобные этой, причинят вам невыразимое количество боли! Создать новую таблицу соединений - member_group (member_id, group_id)

Если вы настаиваете на использовании этой отвратительной структуры, вы можете заменить несколько условий ИЛИ на FIND_IN_SET -

SELECT p1.userid, p1.username, p2.lids 
FROM VB_user p1
LEFT JOIN AB_judge_perm p2
    ON p1.userid = p2.userid
WHERE FIND_IN_SET(19, p1.membergroupids)
...