powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как перевести mssql запрос в mysql ?
7 сообщений из 7, страница 1 из 1
Как перевести mssql запрос в mysql ?
    #39374520
drkrol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте. Есть вот такой mssql запрос:
PHP:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
declare @start date = '2016-12-12'; -- Новая дата заезда
declare @end date = '2016-12-20'; -- Новая дата выезда
declare @today date = '2016-12-11';
 
update  main
set     numbernomer = null
where   datestart > @today;
 
declare @mainnumber int;
 
while exists (select * from main where numbernomer is null)
begin
 
    select top(1) @mainnumber = id
    from    main
    where   numbernomer is null
    order by datestart asc, datediff(day, datestart, dateend) desc;
 
    update m0
    set     numbernomer = m1.nomer
    from    main m0
            cross apply (SELECT top 1 a.nomer
                        FROM    allnomer a
                                LEFT JOIN main m
                                ON a.nomer = m.numbernomer
                                AND DATEDIFF(day, m.datestart, m0.dateend) * DATEDIFF(day, m.dateend, m0.datestart) <= 0
                                left join (select m2.numbernomer, max(m2.dateend) as dateend from main m2 group by m2.numbernomer) as m2
                                        on a.nomer = m2.numbernomer
                        WHERE a.type = 'lux' AND m.numbernomer IS NULL
                        order by datediff(day, m2.dateend, m0.datestart), a.nomer
                        ) as m1
    where   m0.id = @mainnumber;
 
end;
 
SELECT a.nomer
FROM allnomer a
LEFT JOIN main m
  ON a.nomer = m.numbernomer
  AND DATEDIFF(day, m.datestart, @end) * DATEDIFF(day, m.dateend, @start) <= 0
WHERE a.type = 'lux' AND m.numbernomer IS NULL;


Подскажите пожалуйста, что нужно изменить, чтобы этот запрос работал в mysql? Я, кроме того, что нужно decale на set поменять и тип данных убрать, ничего не знаю.
P.S. Запрос должен будет выполняться в этой таблице: http://sqlfiddle.com/#!9/81225

Модератор: Тема перенесена из форума "Microsoft SQL Server".
...
Рейтинг: 0 / 0
Как перевести mssql запрос в mysql ?
    #39374582
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
drkrol
Код: sql
1.
cross apply

А что это?

Вообще этот код не имеет прямого перевода в MySQL, т.к. в MySQL нет анонимных процедур.
Если удастся переписать цикл на чистый SQL, то хорошо (это, кстати, еще в MS SQL стоило сделать). Если нет - придется этот код оборачивать в процедуру.
...
Рейтинг: 0 / 0
Как перевести mssql запрос в mysql ?
    #39374796
drkrol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft,
Это что-то типа join) Хотя скорее это, наверно, был риторический вопрос... Косяк у меня здесь только с циклом. Я уже много чего прочёл, но всё без толку. При попытке реализовать - ошибка на ошибке. По факту, запрос должен перераспределять даты бронирования в гостинице. Сейчас брони у меня разбросаны хаотично, а sql запрос должен дефрагментовать эти данные.
...
Рейтинг: 0 / 0
Как перевести mssql запрос в mysql ?
    #39374821
drkrol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
До:

После:
...
Рейтинг: 0 / 0
Как перевести mssql запрос в mysql ?
    #39374822
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
drkrolЭто что-то типа join) Хотя скорее это, наверно, был риторический вопрос...Нет, не риторический. Я и правда не знаю, что такое cross apply.

Проверьте еще функцию DATEDIFF. Она явно отличается от одноименной функции в MySQL.
...
Рейтинг: 0 / 0
Как перевести mssql запрос в mysql ?
    #39375442
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftdrkrolЭто что-то типа join) Хотя скорее это, наверно, был риторический вопрос...Нет, не риторический. Я и правда не знаю, что такое cross apply.

Проверьте еще функцию DATEDIFF. Она явно отличается от одноименной функции в MySQL.

cross apply. == CROSS JOIN
...
Рейтинг: 0 / 0
Как перевести mssql запрос в mysql ?
    #39375489
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivcross apply. == CROSS JOINВ MySQL JOIN == CROSS JOIN == INNER JOIN
А в MS SQL как?
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как перевести mssql запрос в mysql ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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