Запрос JOIN Неверный результат

G
На сайте с 24.10.2009
Offline
51
475

SELECT a.mid, a.seer, m.id, m.module 

FROM ".$prefix."_mod_access AS a
LEFT JOIN ".$prefix."_modules AS m
ON (a.mid=m.id)
WHERE a.uid=".$_SESSION['user_id']."
AND m.module='".$mod_name."'
LIMIT 1

Есть таблица modules в которой хранится список модулей.

Есть таблица mod_access в которой хранятся разрешения доступа к модулям.

Когда идет проверка, мы имеем только название модуля.

Он по названию модуля должен вытащить его id, найти его в таблице доступа там, где uid=$_SESSION['user_id'] и вернуть либо true если поле разрешения seer =1 , либо false если =0.

Но он почему-то очень неправильно работает. Помогите пожалуйста поправить запрос.

skAmZ
На сайте с 04.09.2009
Offline
122
#1


SELECT a.mid, a.seer, m.id, m.module
FROM ".$prefix."_mod_access AS a, ".$prefix."_modules AS m
WHERE a.mid=m.id and a.uid=".$_SESSION['user_id']."
AND m.module='".$mod_name."'
LIMIT 1

0 строк в результате = 0 в a.seer

SC
На сайте с 02.05.2009
Offline
52
#2

В LEFT или RIGHT JOIN нельзя ставить условия WHERE для второй таблицы, т.к. условием Вы как раз отсекаете все эти записи. Нужно делать условия выборки второй таблицы через ON.

SELECT a.mid, a.seer, m.id, m.module

FROM ".$prefix."_mod_access AS a

LEFT JOIN ".$prefix."_modules AS m

ON (a.mid=m.id AND m.module='".$mod_name."')

WHERE a.uid=".$_SESSION['user_id']."

LIMIT 1

G
На сайте с 24.10.2009
Offline
51
#3

Большое спасибо. Тему можно закрыть.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий