GQL - выберите всех родителей, у которых конкретного ребенка нет у детей - PullRequest
0 голосов
/ 14 января 2012

Я хотел бы иметь родительский класс (группу), в который может присоединиться любое количество пользователей.Я хочу отобразить все группы, в которых пользователь еще не находится. Как мне смоделировать эти данные и как сделать запрос?Извините, что не предоставил никакого кода, но я просто понятия не имею.

Редактировать: В SQL это будет сделано с помощью таблицы User, таблицы Group и таблицы перекрестных ссылок GroupUser.И запрос будет идти:

select *
from Group
where Group.ID not in
(
 select GroupID
 from GroupUser
 where UserID = @userid
)

Ответы [ 3 ]

0 голосов
/ 16 января 2012

Как говорит Вубл, нет способа построить такой запрос для хранилища данных App Engine. Если количество групп значительно превышает число групп, в которых фактически находится пользователь, лучше всего выбрать все группы, а затем отфильтровать те, в которых уже находится пользователь, - это именно то, что база данных SQL сделала бы при таком запросе. .

0 голосов
/ 17 января 2012

Может быть, я неясно сформулировал свой вопрос, я, очевидно, плохо знаком с GAE, и моя терминология может быть неправильной. В любом случае вот мое решение:

class User(db.Model):
  username = db.StringProperty()

class Group(db.Model):
  users = db.ListProperty(db.Key)

Чтобы найти группу и присоединиться (несколько упрощенно):

groups = db.GqlQuery("SELECT * "
                     "FROM Group")        

for g in groups:                
   if user.key() not in g.users:                    
      group = g
      break

group.users.append(user.key())
0 голосов
/ 14 января 2012

Будут тысячи групп, и пользователь будет членом десятков из них?

У вас возникнет проблема с пользовательским интерфейсом: как вы можете выбрать пользователя из тысячи групп? Таблица нумерации страниц более 50 страниц?

О вашей проблеме: когда вы решите вышеуказанную проблему, вы можете просто правильно отметить группы, в которые пользователь уже входит:

Вы можете просто хранить все группы пользователей в памяти (это всего десять идентификаторов, верно?) И просто фильтровать их при отображении групп.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...