@ski28

Как выбрать данные, если нет в одной таблице, то взять из другой?

Есть таблица `user` а есть ещё `userCache`, для ускорения сайта я не активных пользователей отправляю в сache и 100% не знаю где именно сейчас находиться их данные.
Пример как я сейчас делаю
SELECT 
`comment`.*, 
`users`.`avatarInGames`, 
`users`.`gameId`, 
`usersСache`.`avatarInGames` as `avatarInGamesCache`,
`usersСache`.`gameId` as `gameIdCache` 
FROM `comment` 
LEFT JOIN `users` 
ON `comment`.`UID` = `users`.`userId` 
LEFT JOIN `users` 
ON `comment`.`UID` = `usersСache`.`userId` 
WHERE `comment`.`status` = 1 ORDER BY `comment`.`OID` DESC;

Задача избавиться от `avatarInGamesCache` если данные были взять из `usersСache` то я бы их мог получить в `avatarInGames`
  • Вопрос задан
  • 84 просмотра
Решения вопроса 1
Mike_Ro
@Mike_Ro
Python, JS, WordPress, SEO, Bots, Adversting
COALESCE?
SELECT
    comment.*,
    COALESCE(users.avatarInGames, usersCache.avatarInGames) AS avatarInGames,
    COALESCE(users.gameId, usersCache.gameId) AS gameId
FROM comment
LEFT JOIN users ON comment.UID = users.userId
LEFT JOIN usersCache ON comment.UID = usersCache.userId
WHERE comment.status = 1
ORDER BY comment.OID DESC;

COALESCE(users.avatarInGames, usersCache.avatarInGames) AS avatarInGames avatarInGames берет из users или если его там нет, то возьмет из usersCache.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Vitsliputsli
1) если вам нужен кеш, то используйте его как кеш. т.е. берите из кеша горячие данные, если их там нет, то идите за холодными данными.
2) то, что вы попытались сделать, больше похоже на шардирование, когда данные делят на несколько таблиц, чтобы было меньше данных в одной таблице. Так ли это нужно? У вас сотни миллионов строк в таблице? Но и шардирование делается не так, выбирается критерий деления для пользователей, такой чтобы вы заранее знали в какой таблице лежит пользователь.
А сейчас изза соединений производительность только ухудшается.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы