Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сложная выборка из БД 
:(
    Опции темы
lelik133
  Дата 23.3.2006, 09:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 517
Регистрация: 5.2.2003
Где: Москва

Репутация: 2
Всего: 14



Есть mysql база (+ php-движок для доступа к ней, авторизация + вывод контента), в одной из таблиц где-то 30000-40000 строк, есть столбец Ind, с однаковым Ind строк 5-7 в базе. Будут разные клиенты, каждому из них будет выдаваться разные количество строк из базы (кому-то ~50 , 10 разных Ind, кому-то ~6-7 тыс., 1000-1500 разных Ind). Вопрос как лучше хранить все Ind для каждого клиента,и как составлять выборку. Можно конечно в таблице client завести столбец permisions и хранить в нем вида (1001/1002/1010/2053/2144.... и т.д.) а потом split резать и составлять n запросов select, но это как то совсем не оптимально. Другого пока в голову ничего не приходит smile Кто что похожее делал подскажите, хоть в сторону чего смотреть. Извините если несколько сумбурно описал проблему. smile
PM ICQ   Вверх
Ignat
Дата 23.3.2006, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Флудератор
****


Профиль
Группа: Экс. модератор
Сообщений: 4030
Регистрация: 19.4.2004
Где: غيليندزيك مدينة

Репутация: 21
Всего: 73



Цитата(lelik133 @ 23.3.2006, 09:45 Найти цитируемый пост)
Извините если несколько сумбурно описал проблему.

Да ничего страшного smile Всё равно ничего не понятно.


А теперь по порядку:
1. Что такое Ind? Если ключ, то почему есть одинаковые?
2. Какую связь и между какими сущностями необходимо реализовать?


--------------------
Теперь при чем :P
PM   Вверх
lelik133
Дата 23.3.2006, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 517
Регистрация: 5.2.2003
Где: Москва

Репутация: 2
Всего: 14



1. Одниковые значения обязательно присутствуют, т.к. Ind это номер опредленной точки, несколько записей с одинаковым Ind - это значения параметров в этой точке в разное время.
2. Не совсем понял. есть таблица (или сущность) dat (с аттрибутом Ind) и таблица client где собрана инфа о клиентах + те самые значения Ind доступ к которым у клиента есть (это-то я и не знаю как хранить), между ними и нужна связь.
PM ICQ   Вверх
Akina
Дата 23.3.2006, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Если я правильно понял, ты хочешь реализовать систему прав доступа.

Тогда не трогай исходную таблицу, но заведи дополнительную таблицу разрешений с колонками RecordInd, ClientID и, возможно, Permissions. И Join-и ее к основной при выборках.




--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
lelik133
Дата 23.3.2006, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 517
Регистрация: 5.2.2003
Где: Москва

Репутация: 2
Всего: 14



Akina, да ты правильно понял))
т.е. у меня будут 3 таблицы dat - данные, client - инфа о клиентах, permisions - список доступных клиенты записей.
Тогда вопрос такой, как проще и эффективнее релизовать следующую схему. Клиент авторизовался взяли его id из client ,(сформировали как-то запрос к dat в соответсвии с правами из permisions, как реализовать вот эту часть???), далее php обработал выборку и отдал ее в нужно виде.
PM ICQ   Вверх
lelik133
Дата 23.3.2006, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 517
Регистрация: 5.2.2003
Где: Москва

Репутация: 2
Всего: 14



побродил по нету понял что мне бы могли помочь вложенные запросы. Но маленькая неувязочка у меня стоит версия 4.0.21 которая их не поддерживает как я понял, версию то поменять можно, но вот у хостера стоит 4.0.26, он точно менять ничего не будет. Так что варинат такой отпадает. Завис на такой стадии: завел таблицу permisions с аттрибутами id, cid (номер клиента совпадаетс id из clients, Ind - номер записи из dat).
Следующим запросом провожу автризацию и получаю id клиента
Код

select id from clients where log="vasya" and pass="1234"; 

затем получаю все доступные для этого клиента записи Ind
Код

SELECT permisions.Ind FROM clients,permisions WHERE permisions.cid = clients.id;

но как с ними не используя вложенных select`ов вытащить нужное из dat не знаю...
PM ICQ   Вверх
lelik133
Дата 24.3.2006, 09:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 517
Регистрация: 5.2.2003
Где: Москва

Репутация: 2
Всего: 14



поступил сейчас следующим образом средствами PHP после запроса
Код

SELECT permisions.Ind FROM clients,permisions WHERE permisions.cid = clients.id;

формирую запрос уже на выдачу информации из dat
Код

SELECT * FROM dat WHERE Ind IN(1,5,7,8,63,211,564..... т. д.)

внутри IN сейчас для теста сидит 2000 элементов, естественно работает все не ахти как быстро.
В связи с этим есть вопросы
1. Что быстрее такой select с большим количеством вариантов в IN или 2000 единичных select`ов с единственным условием в where или те же 2000 select`ов объдиненных UNION ?
2. Что проще и эффективнее обрабатывать PHP оптом всю инфу выданную запросом с IN, ну или UNION или 2000 раз по одной строчке, если использовать 2000 select`ов?

Это сообщение отредактировал(а) lelik133 - 24.3.2006, 09:45
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0452 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.