Задавайте вопросы, мы ответим
Вы не зашли.
Добрый день, помогите плиз с одним вопросом я тут пишу небольшой движок для своих целей и столкнулся с оптимизацией мускул, и вот вопрос:
имеем 3 таблицы
1. группы пользователей
2. страницы
3. сами пользователи
в таблице страницы есть 2 столбца отвечающие за права
page.access
page.ac_group
смысл заключается в том что если в access указан 0, то доступ закрыт для всех за исключением пользователей которые входят в группу указанную в ac_group
и наоборот если указана 1 то всем разрешено, кроме ac_group
логика:
выбрать все страницы в которых, если в access указан 0, то IDUSER(активный)=group.iduser
или если доступ открыт то IDUSER(активный) не должен быть в группе запрета, соответственно IDUSER!=group.iduser
Пжалуста, а то башка кипит 2 день %)
Неактивен
и как со стороны нагрузки на сервак данный запрос - оправдает он ожидания или может проще менять структура наследования прав?
Неактивен
С точки зрения нагрузки — выборка типа «все страницы» — это всегда плохо, всегда будет полное
сканирование. Соответственно, если это игнорировать, то запрос надо писать «как слышится»:
WHERE (access = 0 AND iduser != IDUSER()) OR (access = 1 AND iduser = IDUSER())
Неактивен
О_о так просто... спасибо большое буду тестить сеня вечером! а выгрузка всех страниц она в любом случае будет, имеется ввиду не всех а по лимиту 0,10
Просто этот запрос мне позволит выбрать 10 именно тех постов которые видимые для юзера а иначе если в 10 он не увидит 3, то для него на странице будет 7 постов, а это уже привлекает внимание, про недостающие 3))) В любом случае выручили спасибо, завтра отпишусь
Неактивен
вообщем это снова я, начинать новую тему считаю флудерством поэтому продолжу в этой. я снова столкнулся с проблемой выборки данных, вот выбор между двух вариантов, какой оптимальнее
выбрать одну таблицу с лимитом во временную а потом ее join left посливать еще с 3 или выполнить выборку 1 таблицы а потом по строкам идти и запросы кидать, но тогда получица в цикле, как быстрее будет работать
P.s. разговор идет о таблице страницы (на них права есть, следовательно одним запросом с абзацами не вытащить иначе лимит идет на абзацы) и таблице в которой абзацы находятся. вот пишу и думаю, что мое мнение что 1 вариант проще, но вот трудности возникают, в инете рыл ничего путного не нашел, только про версию 3.хх расказывают, где можно почитать что это как едят, как пользоваться вообще, сколько живет, уязвимости. недостатки
Неактивен
Ну, громких слов «временная таблица» я бы не употреблял, лимит можно и внутрь засунуть
SELECT ...
FROM paragraphs pp,
(SELECT id FROM pages LIMIT 10) pa
WHERE pp.page = pa.id
Ключик на pp.page.
Неактивен