SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 24.03.2009 11:16:42

mvl777
Участник
Зарегистрирован: 24.03.2009
Сообщений: 4

Выборка данных с конструированием запроса

Добрый день, помогите плиз с одним вопросом я тут пишу небольшой движок для своих целей и столкнулся с оптимизацией мускул, и вот вопрос:
имеем 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 день %)

Неактивен

 

#2 24.03.2009 11:17:58

mvl777
Участник
Зарегистрирован: 24.03.2009
Сообщений: 4

Re: Выборка данных с конструированием запроса

и как со стороны нагрузки на сервак данный запрос - оправдает он ожидания или может проще менять структура наследования прав?

Неактивен

 

#3 24.03.2009 13:23:34

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Выборка данных с конструированием запроса

С точки зрения нагрузки — выборка типа «все страницы» — это всегда плохо, всегда будет полное
сканирование. Соответственно, если это игнорировать, то запрос надо писать «как слышится»:

WHERE (access = 0 AND iduser != IDUSER()) OR (access = 1 AND iduser = IDUSER())

Неактивен

 

#4 24.03.2009 14:46:30

mvl777
Участник
Зарегистрирован: 24.03.2009
Сообщений: 4

Re: Выборка данных с конструированием запроса

О_о так просто... спасибо большое буду тестить сеня вечером! а выгрузка всех страниц она в любом случае будет, имеется ввиду не всех а по лимиту 0,10
Просто этот запрос мне позволит выбрать 10 именно тех постов которые видимые для юзера а иначе если в 10 он не увидит 3, то для него на странице будет 7 постов, а это уже привлекает внимание, про недостающие 3))) В любом случае выручили спасибо, завтра отпишусь

Неактивен

 

#5 13.04.2009 14:31:35

mvl777
Участник
Зарегистрирован: 24.03.2009
Сообщений: 4

Re: Выборка данных с конструированием запроса

вообщем это снова я, начинать новую тему считаю флудерством поэтому продолжу в этой. я снова столкнулся с проблемой выборки данных, вот выбор между двух вариантов, какой оптимальнее
выбрать одну таблицу с лимитом во временную а потом ее join left посливать еще с 3 или выполнить выборку 1 таблицы а потом по строкам идти и запросы кидать, но тогда получица в цикле, как быстрее будет работать
P.s. разговор идет о таблице страницы (на них права есть, следовательно одним запросом с абзацами не вытащить иначе лимит идет на абзацы) и таблице в которой абзацы находятся. вот пишу и думаю, что мое мнение что 1 вариант проще, но вот трудности возникают, в инете рыл ничего путного не нашел, только про версию 3.хх расказывают, где можно почитать что это как едят, как пользоваться вообще, сколько живет, уязвимости. недостатки

Неактивен

 

#6 14.04.2009 00:08:52

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Выборка данных с конструированием запроса

Ну, громких слов «временная таблица» я бы не употреблял, лимит можно и внутрь засунуть smile

SELECT ...
FROM paragraphs pp,
(SELECT id FROM pages LIMIT 10) pa
WHERE pp.page = pa.id

Ключик на pp.page.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson