Alkinoy
Guest
Не поможете оптимизировать запрос? Join 2-х таблиц....
Трям. Описываю задачу. Есть таблица с названием обектов. Есть таблица, в которой указано, какому юзверю к какому объекту можно получить доступ. Причем, одному юзверю можно получить доступ к произвольному числу объектов, и к одному объекту может получить доступ произвольное число юзверей.
Структуру придумал такую. Первая таблица:
Id_юзверя Описание Еще энное количество полей...
Вторая таблица:
Id_объекта Описание Еще энное количество полей...
Третья таблица (соответствие узлов юзверям - то есть кому куда можно)
Id_юзверя Id_объекта
Перед запросом мы уже знаем Id_юзверя.
Теперь напосредственно задача: Надо вывести список ВСЕХ объектов и пометить в нем те, доступ к которым имеет юзверь.
Мне придумалось такое:
!!!!! - if ($row_cuz["CUzContrId"] == $contrid) {echo 'selected';};
Вот то что выделено !!!- это как раз и есть пометка тех объектов, к которым юзверь уже имеет доступ.
Теперь словами. Сначала создали временную таблицу, в которую выделили все записи из третьей таблички, потом лефт джоин таблицу с объектами (слева) и временную таблицу. Таким образом, если в строке в каком то поле получим нул, значит этой строки нет во временной таблице, и следовательно юзверю доступа туда нет. Если есть - значит есть доступ и помечаем.
Но можно ли это сделать одним запросом, а не тремя?
Трям. Описываю задачу. Есть таблица с названием обектов. Есть таблица, в которой указано, какому юзверю к какому объекту можно получить доступ. Причем, одному юзверю можно получить доступ к произвольному числу объектов, и к одному объекту может получить доступ произвольное число юзверей.
Структуру придумал такую. Первая таблица:
Id_юзверя Описание Еще энное количество полей...
Вторая таблица:
Id_объекта Описание Еще энное количество полей...
Третья таблица (соответствие узлов юзверям - то есть кому куда можно)
Id_юзверя Id_объекта
Перед запросом мы уже знаем Id_юзверя.
Теперь напосредственно задача: Надо вывести список ВСЕХ объектов и пометить в нем те, доступ к которым имеет юзверь.
Мне придумалось такое:
PHP:
//а вот тут выводим все узлы и помечаем те, к которым привязан
$query='create temporary table TCUz select * from CUz where CUzContrId = "'.$contrid.'"';
mysql_query($query, $db);
$res_cuz = mysql_query('select * from Uz left join TCUz on Uz.UzId = TCUz.CUzUzId', $db);
while($row_cuz = mysql_fetch_array($res_cuz))
{
echo '<option value="'.$row_cuz["UzId"].'"';
PHP:
echo '>'.$row_cuz["UzId"].'-'.$row_cuz["UzDesc"].'</option>';
}
mysql_query('drop table TCUz', $db);
Теперь словами. Сначала создали временную таблицу, в которую выделили все записи из третьей таблички, потом лефт джоин таблицу с объектами (слева) и временную таблицу. Таким образом, если в строке в каком то поле получим нул, значит этой строки нет во временной таблице, и следовательно юзверю доступа туда нет. Если есть - значит есть доступ и помечаем.
Но можно ли это сделать одним запросом, а не тремя?