Я очень смущен функцией подзапроса в MySQL.
В моем примере я использую 3 таблицы:
adr содержит адреса adr_acc содержит группы или пользователей, которые имеют доступ к адресам usr_grp содержит пользователей, принадлежащих к группе
select * from adr where
adr.adr_id in
(select ac1.adr_id from adr_acc as ac1 where
(
(ac1.acc_type = 'U' and ac1.acc_id = '".$s['user']."') or
(ac1.acc_type = 'G' and ac1.acc_id in
(select ug1.grp_id from usr_grp as ug1 where ug1.usr_id = '".$s['user']."')
)
)
)
Я получаю сообщение об ошибке:
что мне не хватает?
ARGGGGGGGGGGGGGG - Я глуп, извиняюсь за то, что спросил что-то невероятно глупое.
SELECT *
FROM adr
WHERE adr.id IN(
SELECT ac1.adr_id
FROM adr_acc AS ac1
WHERE (
( ac1.acc_type = 'U' AND ac1.acc_id = '".$s[' USER ']."' )
OR (ac1.acc_type = 'G' AND ac1.acc_id IN (SELECT ug1.grp_id FROM usr_grp AS ug1 WHERE ug1.usr_id = '".$s[' USER ']."')
)
))
Это правильный запрос.
adr
(id
VARCHAR (20) сопоставления latin1_german1_ci NOT NULL,) CREATE TABLE IF NOT EXISTSadr_acc
(adr_id
VARCHAR (20) сопоставления latin1_german1_ci NOT NULL,acc_type
VARCHAR (1) собирать latin1_german1_ci NOT NULL,acc_id
VARCHAR (20) collate latin1_german1_ci NOT NULL,adr_id
acc_type
(adr_id
,acc_type
,acc_id
))adr_id
acc_type
, ЕСЛИ НЕusr_grp
(usr_id
varchar (20) collate latin1_german1_ci NOT NULL,grp_id
varchar (20) ЗНАЧИТЬusr_id
grp_id
usr_id
grp_id
(grp_id
)