powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Запрос всегда выдает NULL
25 сообщений из 26, страница 1 из 2
Запрос всегда выдает NULL
    #39192997
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
(SELECT IF(cr2.remains_time IS NULL, 
              IF(cr.weight_brutto_remains = 0, NULL, CURTIME()), 
              cr2.remains_time) 
FROM cargo_remains cr2 
WHERE cr2.cargo_card_id = cr.cargo_card_id
AND cr2.remains_time > cr.remains_time
ORDER BY cr2.remains_time 
LIMIT 1) AS remains_time_next


Это часть другого запроса, и IF сверху решает, что в случае результата NULL надо выводить текущее время. Однако при любом раскладе все равно получается NULL, т.к. если запрос не находит строк, то просто не срабатывают IF-ы, а сразу выдает NULL, как то, что строки не найдены.
Как сделать, чтобы в случае ненахождения строк выдавал результат, определяемый IF-ами?
...
Рейтинг: 0 / 0
Запрос всегда выдает NULL
    #39193011
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svnvladКак сделать, чтобы в случае ненахождения строк выдавал результат, определяемый IF-ами?
Так в результирующем наборе же нет записей... в чём тебе возвращать этот самый не-NULL?
...
Рейтинг: 0 / 0
Запрос всегда выдает NULL
    #39193012
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svnvlad,

а что за объект cr ?
...
Рейтинг: 0 / 0
Запрос всегда выдает NULL
    #39193015
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если надо получить скаляр, то тупо
Код: sql
1.
COALESCE( (твой запрос), CURTIME()) AS remains_time_next
...
Рейтинг: 0 / 0
Запрос всегда выдает NULL
    #39193017
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinasvnvladКак сделать, чтобы в случае ненахождения строк выдавал результат, определяемый IF-ами?
Так в результирующем наборе же нет записей... в чём тебе возвращать этот самый не-NULL?
Этот подзапрос возвращает время окончания фрагмента времени. Если строк нет, значит еще не прописано последнее время последнего фрагмента, и нужно вернуть текущее время.
Задача - в случае отсутствия строк запроса вернуть текущее время.
...
Рейтинг: 0 / 0
Запрос всегда выдает NULL
    #39193024
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaА если надо получить скаляр, то тупо
Код: sql
1.
COALESCE( (твой запрос), CURTIME()) AS remains_time_next


Я пытался запихать подзапрос внутрь другого выражения, выдает ошибку.
...
Рейтинг: 0 / 0
Запрос всегда выдает NULL
    #39193029
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svnvladЗадача - в случае отсутствия строк запроса вернуть текущее время.сделайте через MIN()
...
Рейтинг: 0 / 0
Запрос всегда выдает NULL
    #39193043
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftsvnvlad,

а что за объект cr ?
cargo_remains внешнего запроса.
...
Рейтинг: 0 / 0
Запрос всегда выдает NULL
    #39193044
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftsvnvladЗадача - в случае отсутствия строк запроса вернуть текущее время.сделайте через MIN()
Не понял.
...
Рейтинг: 0 / 0
Запрос всегда выдает NULL
    #39193049
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaА если надо получить скаляр, то тупо
Код: sql
1.
COALESCE( (твой запрос), CURTIME()) AS remains_time_next


Ошибки не выдало, но теперь показывает 0000-00-00.
А там же еще одно внутренне условие - IF(условие, NULL, CURTIME()).
Его как обработать?
В общем смысл такой:
/* Следующее время уменьшения груза. Если NULL и остался груз, то текущее время. */
/* Если NULL и нет груза, то NULL */
...
Рейтинг: 0 / 0
Запрос всегда выдает NULL
    #39193067
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вся логика того, что ты тут рассказываешь, свидетельствует о том, что подзапрос тебе нахрен не нужен. Избавься от него, введи получение требуемого значения в текст основного запроса.
...
Рейтинг: 0 / 0
Запрос всегда выдает NULL
    #39193089
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svnvladmiksoftпропущено...
сделайте через MIN()
Не понял.
Код: sql
1.
2.
3.
4.
(SELECT IFNULL(MIN(cr2.remains_time), CURTIME())
FROM cargo_remains cr2 
WHERE cr2.cargo_card_id = cr.cargo_card_id
AND cr2.remains_time > cr.remains_time)
...
Рейтинг: 0 / 0
Запрос всегда выдает NULL
    #39193091
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaВся логика того, что ты тут рассказываешь, свидетельствует о том, что подзапрос тебе нахрен не нужен. Избавься от него, введи получение требуемого значения в текст основного запроса.
Каким это образом интересно, если в одном запросе надо получить два значения - текущую строку таблицы и следующую?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SELECT ....,
.......
cr.remains_time, /* Предыдущее время */

(SELECT cr2.remains_time
FROM cargo_remains cr2 
WHERE cr2.cargo_card_id = cr.cargo_card_id
AND cr2.remains_time > cr.remains_time
ORDER BY cr2.remains_time 
LIMIT 1) AS remains_time_next, /* Следующее время */
..........
FROM cargo_remains cr
......
...
Рейтинг: 0 / 0
Запрос всегда выдает NULL
    #39193093
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svnvladв одном запросе надо получить два значения - текущую строку таблицы и следующую
Используй две копии таблицы в основном запросе. Ты их всё равно две используешь.
...
Рейтинг: 0 / 0
Запрос всегда выдает NULL
    #39193099
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftsvnvladпропущено...

Не понял.
Код: sql
1.
2.
3.
4.
(SELECT IFNULL(MIN(cr2.remains_time), CURTIME())
FROM cargo_remains cr2 
WHERE cr2.cargo_card_id = cr.cargo_card_id
AND cr2.remains_time > cr.remains_time)


Да, можно.
Но что в моем варианте, что здесь аномалия какая-то происходит. В случае отсутствия строк запроса выдает не текущее время, а 0000-00-00 00:00:00.
Если MIN(cr2.remains_time) меняю на MIN(cr2.id), то выдает текущее время.
...
Рейтинг: 0 / 0
Запрос всегда выдает NULL
    #39193103
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft
Код: sql
1.
MIN(cr2.remains_time)

Для отладки выведите MIN(cr2.remains_time)
...
Рейтинг: 0 / 0
Запрос всегда выдает NULL
    #39193113
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftmiksoft
Код: sql
1.
MIN(cr2.remains_time)

Для отладки выведите MIN(cr2.remains_time)
и MIN(cr2.remains_time), и MIN(cr2.id) выдают NULL.
...
Рейтинг: 0 / 0
Запрос всегда выдает NULL
    #39193117
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svnvlad,

А если так:
Код: sql
1.
IFNULL(MIN(cr2.remains_time), '2017-01-01 01:01:01')

(ну то есть написать дату, которой гарантированно нет в таблице.)
...
Рейтинг: 0 / 0
Запрос всегда выдает NULL
    #39193121
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftsvnvlad,

А если так:
Код: sql
1.
IFNULL(MIN(cr2.remains_time), '2017-01-01 01:01:01')

(ну то есть написать дату, которой гарантированно нет в таблице.)
Тогда выдает '2017-01-01 01:01:01'
...
Рейтинг: 0 / 0
Запрос всегда выдает NULL
    #39193124
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft,

Почитал доку IFNULL, что-то она мне не нравится.
На всякий случай попробуйте так:
Код: sql
1.
2.
3.
4.
(SELECT CASE WHEN MIN(cr2.remains_time) IS NULL THEN CURTIME() ELSE MIN(cr2.remains_time) END)
FROM cargo_remains cr2 
WHERE cr2.cargo_card_id = cr.cargo_card_id
AND cr2.remains_time > cr.remains_time)
...
Рейтинг: 0 / 0
Запрос всегда выдает NULL
    #39193126
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akinasvnvladв одном запросе надо получить два значения - текущую строку таблицы и следующую
Используй две копии таблицы в основном запросе. Ты их всё равно две используешь.
И как связать первую с текущим значением, а вторую со следующим?
...
Рейтинг: 0 / 0
Запрос всегда выдает NULL
    #39193130
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svnvlad,

О, разглядел, у вас CURTIME, а нужно CURDATE. Дата же какая-то тоже должна быть?
...
Рейтинг: 0 / 0
Запрос всегда выдает NULL
    #39193133
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftmiksoft,

Почитал доку IFNULL, что-то она мне не нравится.
На всякий случай попробуйте так:
Код: sql
1.
2.
3.
4.
(SELECT CASE WHEN MIN(cr2.remains_time) IS NULL THEN CURTIME() ELSE MIN(cr2.remains_time) END)
FROM cargo_remains cr2 
WHERE cr2.cargo_card_id = cr.cargo_card_id
AND cr2.remains_time > cr.remains_time)


(скобка лишняя после END)
Но то же самое выдает. 0000-00-00
...
Рейтинг: 0 / 0
Запрос всегда выдает NULL
    #39193137
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftsvnvlad,

О, разглядел, у вас CURTIME, а нужно CURDATE. Дата же какая-то тоже должна быть?
Спасибо! А я думал CURTIME выдает и дату, и время. Да, дата тоже должна быть. А как тогда? CURDATE() + CURTIME()?
...
Рейтинг: 0 / 0
Запрос всегда выдает NULL
    #39193141
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svnvlad,

SYSDATE() или NOW()
...
Рейтинг: 0 / 0
25 сообщений из 26, страница 1 из 2
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Запрос всегда выдает NULL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]