@snake2
Сразу пишу legacy код

Как выбрать нужные записи из бд?

Есть следующая структура бд
id weight user_id
1 1 1
2 2 null
3 3 null

Как сделать так, чтобы запрос выводил одну запись по следующей логике
Если есть user_id вернуть запись с user_id
Если user_id нету вернуть запись с самым большим id
  • Вопрос задан
  • 117 просмотров
Пригласить эксперта
Ответы на вопрос 2
@Akina
Сетевой и системный админ, SQL-программист.
SELECT *
FROM table
ORDER BY user_id = @user_id DESC, id DESC LIMIT 1

Если заданный @user_id есть - вернётся соотв. запись. Если таких записей несколько - вернётся запись из них с максимальным id. Иначе вернётся просто запись с макс. id.

Если же под "Если есть user_id вернуть запись с user_id" разумеется "ну хоть какой-то, лишь бы не NULL", то
SELECT *
FROM table
ORDER BY user_id IS NULL, id DESC LIMIT 1
Ответ написан
Комментировать
Попробуйте
(SELECT * FROM mytable WHERE user_id IS NOT NULL LIMIT 1)
UNION
(SELECT * FROM mytable WHERE id = (SELECT MAX(id) FROM mytable ) )
LIMIT 1
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы