Как создать SQL-запрос, чтобы получить все элементы с более высоким значением, сравнивая два столбца - PullRequest
0 голосов
/ 12 апреля 2019

У меня была эта таблица в моей схеме mysql:

   id    | user_id    | cellphone_id    |    favorited_at        | unfavorited_at
    1    |   234      |     7           |   2019-04-09 12:35:02  |    
    2    |   234      |     5           |   2019-04-09 13:00:02  |
    4    |   234      |     7           |   2019-04-09 12:35:02  | 2019-04-10 12:35:02

Эта таблица представляет историю всех избранных пользователем мобильного телефона пользователем приложения.

в приведенном выше примере cellphone_id 7 был избраннымв 2019-04-09 и после был избранным в 2019-04-10.

Так что я хотел бы создать запрос, чтобы выбрать все избранные пользователем мобильные телефоны в данный момент, поэтому, когда я запускаю запрос, результатдолжно быть что-то вроде этого:

 SELECT * FROM favorite_user_cellphone
 WHERE user_id = 234 AND <something.....>

результат должен быть:

   id    | user_id    | cellphone_id    |    favorited_at        | unfavorited_at  
    2    |   234      |     5           |   2019-04-09 13:00:02  |

Должно быть возвращено только cellphone_id 5, потому что cellphone_id 7 был добавлен в избранное и после него был избран.

Ответы [ 4 ]

1 голос
/ 12 апреля 2019

Вы можете использовать запрос NOT EXISTS:

SELECT *
FROM t
WHERE unfavorited_at IS NULL
AND NOT EXISTS (
    -- t is a favorited record
    -- x is an unfavorited record that is more recent than t
    SELECT 1
    FROM t AS x
    WHERE user_id        = t.user_id
    AND   cellphone_id   = t.cellphone_id
    AND   unfavorited_at > t.favorited_at
)
0 голосов
/ 13 апреля 2019

Используйте его

ВЫБРАТЬ * ИЗ избранное_пользователя_ где телефон user_id = 234 И НЕ ВХОДИТЬ (ВЫБРАТЬ cellphone_id ИЗ избранного_пользователя ГДЕ user_id = 234 и не избрано_все не пусто)

0 голосов
/ 12 апреля 2019
Select * from 
favorite_user_cellphone uc
where user_id = 234 and favorited_at is not null And cellphone_id  not in 
(
Select cellphone_id  from 
favorite_user_cellphone uc
where user_id = 234 and unfavorited_at is not null)
0 голосов
/ 12 апреля 2019

Для одного пользователя, я думаю, вы можете использовать order by и limit:

SELECT uc.*
FROM favorite_user_cellphone uc
WHERE user_id = 234 AND <something.....>
ORDER BY favorited_at DESC
LIMIT 1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...