Доброго времени суток!
Помогите сделать выборку из таблицы.
Вид таблицы
У каждого level свой price который подставляется в запросе
По коду этот запрос написал такой, но можно написать это грамотней наверно...
Результат выполнения будет такой:
В таблице с результатом надо уже сравнивать 4 колонки chat_id, ref, to_user, level
Логика следующая: от записи где chat_id == 9 смотрим равен ли ref и to_user если да, перейти к строке где chat_id == 5 (так как в 9 строке to_user == 5)
В пятой строке проверить level записью из 9 строки если он меньше подниматься выше по таблице. Из пятой строки перейти ко второй и снова сравнить level в примере он опять меньше в таком случае надо перейти к строке 1 которой выборке нет.
Может быть и другая ситуация когда в 2 строке level будет равен или больше чем в 9 строке тогда, надо остановиться на второй записи.
Вроде как то давно видел решение подобной задачи и там решалось это все одним запросом в базу или два запроса, но точно не так как у меня получается 100500 запросов
Помогите сделать выборку из таблицы.
Вид таблицы
chat_id | ref | to_user | level | price |
1 | 0 | 0 | 7 | 0 |
2 | 1 | 1 | 1 | 10 |
3 | 1 | 1 | 0 | 0 |
4 | 1 | 1 | 4 | 0 |
5 | 2 | 2 | 1 | 30 |
6 | 1 | 2 | 2 | 0 |
7 | 3 | 2 | 1 | 50 |
8 | 4 | 3 | 1 | 0 |
9 | 5 | 5 | 2 | 20 |
У каждого level свой price который подставляется в запросе
По коду этот запрос написал такой, но можно написать это грамотней наверно...
Python:
s.query(Table).filter(Table.level < 7, or_(Table.price >= level_1),
or_(Table.price >= level_2),
or_(Table.price >= level_3),
or_(Table.price >= level_4),
or_(Table.price >= level_5),
or_(Table.price >= level_6)).order_by(Table.id.asc()).all()
Результат выполнения будет такой:
chat_id | ref | to_user | level | price |
2 | 1 | 1 | 1 | 10 |
5 | 2 | 2 | 1 | 30 |
7 | 3 | 3 | 1 | 50 |
9 | 5 | 5 | 2 | 20 |
В таблице с результатом надо уже сравнивать 4 колонки chat_id, ref, to_user, level
Логика следующая: от записи где chat_id == 9 смотрим равен ли ref и to_user если да, перейти к строке где chat_id == 5 (так как в 9 строке to_user == 5)
В пятой строке проверить level записью из 9 строки если он меньше подниматься выше по таблице. Из пятой строки перейти ко второй и снова сравнить level в примере он опять меньше в таком случае надо перейти к строке 1 которой выборке нет.
Может быть и другая ситуация когда в 2 строке level будет равен или больше чем в 9 строке тогда, надо остановиться на второй записи.
Вроде как то давно видел решение подобной задачи и там решалось это все одним запросом в базу или два запроса, но точно не так как у меня получается 100500 запросов