powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Переменные в запросе
3 сообщений из 3, страница 1 из 1
Переменные в запросе
    #38645043
mimi22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SELECT * ,
                    @date_tmtp := UNIX_TIMESTAMP(date),
                    @time_from_lesson := @date_tmtp + time_from,
                    @time_end_lesson := @date_tmtp + time_from + lasting
            FROM lessons
            WHERE (student_id=:student_id OR teacher_id=:student_id) AND
                  id != :this_lesson AND
                  (status = 1 OR status = 3 OR status = 5) AND
                  (
                    (@time_from_lesson <= UNIX_TIMESTAMP(:date) + :time_from) AND (UNIX_TIMESTAMP(:date) + :time_from < @time_end_lesson)
                      OR ((@time_from_lesson <= UNIX_TIMESTAMP(:date) + :time_from + :lasting) AND UNIX_TIMESTAMP(:date) +  :time_from + :lasting <= @time_end_lesson)
                  )
            "


суть запроса, у меня в БД date в формате DATETIME, time_from в timestamp, lasting тоже в timestamp
я бы хотел чтобы учитывались переходы между днями, допустим если timestamp + lasting > 86400, это уже следующий день.
Изначально был такой запрос, где соотвественно это не учитывалось.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SELECT *
            FROM lessons
            WHERE " . $where . "
                    AND id != :this_lesson
                    AND date=:date
                    AND status = 1
                    AND (
                      ((time_from <= :time_from) AND (:time_from <= time_from + lasting))
                        OR ((time_from <= :time_from + :lasting) AND :time_from + :lasting <= time_from + lasting)
                        OR ((:time_from <= time_from) AND (time_from + lasting <= :time_from + :lasting))
                    )


как составить запрос наиболее оптимизированно в моем случае? ну и конечно чтобы работало, заранее спасибо всем кто откликнется)
...
Рейтинг: 0 / 0
Переменные в запросе
    #38645764
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mimi22,

1. не используйте переменные кроме как в СЕЛЕКТ части.
2. лучше не используйте переменные вообше.
3. не называйте колонку "date"
4. приведите пример исходных данных (4-10 строчек)
и ожидаемого результата
...
Рейтинг: 0 / 0
Переменные в запросе
    #38646265
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
javajdbcmimi22,

1. не используйте переменные кроме как в СЕЛЕКТ части.
2. лучше не используйте переменные вообше.
3. не называйте колонку "date"
4. приведите пример исходных данных (4-10 строчек)
и ожидаемого результата

поддерживаю, не вникал что делает запрос точно, но внешне, смысла переменых вообще не видно. его сдесь просто нету

никчему делать
Код: sql
1.
2.
3.
select *, @myvar = sql_function(:myconst)
from table
where field1 < @myvar



можно сразу
Код: sql
1.
2.
select * from table
where field1< sql_function(:myconst)



полагаю автор хотел оптимизировать, пощитал что для каждой строки будет вычисляться значение
sql_function(:myconst)

Нет, функция от константы, это константное значение, так что мускл один раз пощитает и уже во время самой работы секции where будет работать с условием
field1 < calculated_sql_function_from_my_const
где
calculated_sql_function_from_my_const - константа для данного запроса.

а вот то что автор намутил, приведет к тому что будет выборка всей таблицы, итолько потом реальная фильтрация, т.к. переменные обрабатываються только во время отдачи результата клиенту


Тоесть
база обрабатывает
1)секция фром (подготовка источника)
2)фильтрация с помощью индексов (секция веар)
3)чтения отобраного на этапе2, с фильтрацией не по индексам и подготовка результата(секция селект)
4)отдача клиента

и если есть переменные, то они будут работать на этапе 3.5 перед отдачей клиенту

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


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