Спасибо за скрипку БД. Я в значительной степени изменил ваш запрос в соответствии со следующими рекомендациями:
GROUP BY
FROM calendar CROSS JOIN zones
; общие фильтры, основанные на параметрах, которые применяются к calendar
и zones
и могут быть помещены в пункт WHERE
LEFT JOIN
таблицах ed должно быть перемещено в [ 117] предложение соответствующего объединения DATE
, чем DATE_FORMAT
для усечения даты-времени до даты Новый запрос (см. the db fiddle ):
SELECT z.zoneID, calendar.dy, z.seasonmax, z.daymax, COUNT(DISTINCT l.ID) Asold
FROM
calendar
CROSS JOIN zones z
LEFT JOIN licensetypes lt ON z.zoneID IN(lt.ValidForZone)
LEFT JOIN licenses l
ON lt.ID = l.TypeID
AND calendar.dy BETWEEN DATE(l.From) AND DATE(l.To)
WHERE
FIND_IN_SET( z.zoneID, ( SELECT lt2.ValidForZone FROM licensetypes lt2 WHERE lt2.ID = @licensetype ) )
AND calendar.dy >= @fromdate
AND calendar.dy <= @todate
GROUP BY z.zoneID, calendar.dy, z.seasonmax, z.daymax
ORDER BY dy
NB: этот запрос неправильно учитывает случай, когда несколько значений, разделенных запятыми, хранятся в licensetypes.ValidForZone
: при совпадении нескольких типов лицензий первый считается (так же, как ваш исходный запрос). Было бы лучше нормализовать вашу базу данных и использовать таблицу мостов для хранения отношения 1-N между типами лицензий и зонами, вместо того, чтобы вставлять значения N в одно поле ...
Профессиональная социальная сеть LinkedIn является хорошим местом для начинаний с. Можно связаться с группами с одинаковыми интересами и найти, что люди начинают проект, находят работодателей и так далее.
Попробуйте FairSoftware или более конкретно FairSoftware/TeamUp.
Можно ли попробовать WhyNot? обмен идеями. Это - форум обмена общего представления. Некоторые идеи являются связанным программным обеспечением.
Существуют десятки. Для запуска посмотрите на 37signals Совет ГБ и RentACoder.
В разделе "Работа" на Craigslist время от времени появляются такие запросы. Разумеется, с оговоркой.