Так у меня есть две таблицы, одна для ТВ-шоу, а другая для Эпизодов, схематически:SQLite запроса с двумя таблицами, чтобы найти «следующий эпизод смотреть»
show {
long id;
String title;
}
episode {
int season;
int episode;
long showId (foreign key)
int watched: Default (0)
}
Я пытаюсь выполнить запрос который вернется для каждого шоу, следующий эпизод пользователь должен посмотреть. Допустим, у меня есть два шоу: Show A и Show B, каждая строка - это сезон, а каждый номер - эпизод. Я представляю эпизоды с 0 (не смотрел) и 1 (смотрел).
A (2 seasons of 4 episodes)
0000
0000
B (3 seasons of 3 episodes)
000
000
000
Для предыдущего примера, запрос должен возвращать:
A, season = 1, episode = 1
B, season = 1, episode = 1
Еще примеры:
A
010
000
B
111
000
Здесь запрос должен возвращать:
A, season = 1, episode = 3
B, season = 2, episode = 1
Другое:
A
0100100101
0001000000
B
1110000001
0000000010
Здесь запрос должен возвращать:
A, season = 2, episode = 5
B, season = 2, episode = 10
Как вы можете видеть, пользователь может пропустить эпизоды или смотреть их без того, но я всегда хочу, чтобы показать, как «рядом смотреть» тот, который сразу же рядом с самым дальним эпизодом.
Возможно ли это сделать в одном запросе? (может иметь подзапросы, конечно). Но я ищу один запрос здесь, поэтому я могу подключить его к Android Loader.
Здравствуйте, спасибо за ваш ответ. Ваше объяснение имеет смысл. Тем не менее, я пытался реализовать его (сам по себе, основываясь на ваших объяснениях и глядя на ваш код), но я еще не получил результата. Вот скрипка: http://sqlfiddle.com/#!9/27405/42. Не могли бы вы взглянуть на него? Я получаю шоу A, эпизод 2 сезона 2 и сериал 2 сезона 2. Так что для шоу B используется сезон/эпизод из шоу A:/ –
И я думаю, что моя проблема в том, что в подзапросе, который принимает max (sortkey) всегда возвращает максимум всей таблицы (не для каждого шоу). –
Ну, вы сделали скрипку с MySQL, которая сильно отличается от SQLite, но в любом случае ... Ваша проблема связана с использованием устаревшего синтаксиса соединения, который, как известно, подвержен ошибкам. Вместо этого используйте явные соединения! В вашем подзапросе вы получаете данные из шоу и эпизодов.Вы пересекаете эти таблицы, используя 'FROM show, episodes' вместо того, чтобы правильно их присоединять к' FROM показывает эпизоды JOIN ON ... '. Затем у вас есть 'show.id = episodes.showId' в вашем предложении WHERE. Но вам нужно * два * критерия на ShowId: ... –