Size: a a a

pgsql – PostgreSQL

2021 July 03

SS

Steel Sword in pgsql – PostgreSQL
Не в первичном. У меня таблица с полями:
дата, время входа, время выхода nullable

Поэтому я добавил UNIQUE (дата, время выхода)
чтобы можно было либо добавлять новую строку со временем входа, либо обновлять последнюю строку, у которой null во времени выхода.
Но я похоже обложался, и придется либо писать два запроса, либо добавлять флаг, либо хранимку (не вариант), либо есть какой-нибудь фокус
источник

SS

Steel Sword in pgsql – PostgreSQL
Как лучше поступить?
источник

W

Warstone in pgsql – PostgreSQL
Добавить туда id пользователя?
Так как просто дата и время выхода - это идиотизм. 2 пользователя не могут выйти в одно и то-же время?
источник

SS

Steel Sword in pgsql – PostgreSQL
Он есть, это к делу не относится и никак проблему не решает
источник

W

Warstone in pgsql – PostgreSQL
Почему? id уникальный. Значит ты id можно задублироваться.
источник

SS

Steel Sword in pgsql – PostgreSQL
Ну ладно, и как ты представляешь UPSERT, который либо создает новую строку для входа, либо обновляет последнюю строку пользователя за определенный день, если он еще не вышел?
источник

W

Warstone in pgsql – PostgreSQL
Полностью задачу можно?..
источник

Д

Денис in pgsql – PostgreSQL
SELECT b.buy_id, title, bb.amount, book.price, book.amount * price AS Общее FROM buy b INNER JOIN buy_book bb USING(buy_id)                     INNER JOIN book USING(book_id);


buy_id |       title        | amount | price  |  Общее  
--------+--------------------+--------+--------+---------
     1 | Мастер и Маргарита |      1 | 670.99 | 2012.97
     1 | Черный человек     |      2 | 570.20 | 3421.20
     2 | Лирика             |      2 | 518.99 | 1037.98
     3 | Идиот              |      2 | 460.00 | 4600.00
     3 | Белая гвардия      |      1 | 540.50 | 2702.50
     3 | Мастер и Маргарита |      1 | 670.99 | 2012.97
     4 | Игрок              |      1 | 480.50 | 4805.00


По какому принципу получается колонка «общее»? Я думал, что берется число из amount и перемножается на число из price для одной строки, но видимо это не так
источник

SS

Steel Sword in pgsql – PostgreSQL
Я вроде всё что можно написал...

Таблица, айди человека, дата, время входа, время выхода. Время выхода nullable. Человек входит - создаётся запись со временем входа и null во времени выхода. Человек выходит, и прошлая запись дополняется временем выхода.
источник

W

Warstone in pgsql – PostgreSQL
Ну значит UPDATE table SET exit_time = ... WHERE user_id = ... AND exit_time IS NULL; Никакого апсерта нету. Потому и спрашивал полностью задачу.
источник

SS

Steel Sword in pgsql – PostgreSQL
А как узнать, insert делать или update
источник

W

Warstone in pgsql – PostgreSQL
Так у вас всегда UPDATE будет.
источник

4

4g in pgsql – PostgreSQL
Роман тут непотребства
источник

SS

Steel Sword in pgsql – PostgreSQL
Нюанс в том, что в интерфейсе нет выбора между входом и выходом. Одна активация действия - вход, вторая активация - выход
источник

МШ

Михаил Шурутов... in pgsql – PostgreSQL
/report
источник

РЖ

Роман Жарков... in pgsql – PostgreSQL
Спасибо! Общественная мораль снова спасена.
источник

W

Warstone in pgsql – PostgreSQL
UPDATE RETURNING id и если 0 записей - создай.
источник

SS

Steel Sword in pgsql – PostgreSQL
🤔 в принципе... сойдет 🙃

Спасибо
источник

Ю

Юрий Шапоренко... in pgsql – PostgreSQL
amount, которое вы перемножаете на price, не тот amount, который вы выводите: один из bb (byu_book), другой — из book
источник

ИЛ

Иван Лещёв in pgsql – PostgreSQL
сначала пишут запросы сокращённо, а потом непонятно, что происходит
источник