Ответы пользователя по тегу MySQL
  • SQL запрос на поиск пользователей с фильтром на возраст и пол?

    tsklab
    @tsklab
    Здесь отвечаю на вопросы.
    возрасту…(сегодня)-('birthday')=лет
    Это не лет. Возраст вычисляется так:
    CAST( DATEDIFF( Year, BirthDay, ISNULL( DeathDay, GETDATE())) + ( SIGN ( DATEDIFF ( DAY, BirthDay, DATEADD ( YEAR, YEAR( BirthDay ) - YEAR( ISNULL( DeathDay, GETDATE()) ), ISNULL( DeathDay, GETDATE())))) - 1 ) / 2 AS VARCHAR)
    Ответ написан
    Комментировать
  • LIKE только целое слово?

    tsklab
    @tsklab
    Здесь отвечаю на вопросы.
    Есть возможность с помощью LIKE выбрать только целые слова?
    (' ' + field + ' ') LIKE '% 088 %'
    Ответ написан
  • Какая структура у реляционной базы данных?

    tsklab
    @tsklab Куратор тега SQL Server
    Здесь отвечаю на вопросы.
    К примеру, есть 2 таблицы
    Это нарушение нормальной формы. Изучение БД, SQL нужно начинать с математики, конкретнее, теории множеств.
    Ответ написан
    Комментировать
  • Как дополнить таблицу недостающими значениями в MYSQL?

    tsklab
    @tsklab
    Здесь отвечаю на вопросы.
    select user, activity from table1
    union
    select user, 0 from table2
    order by 1
    Ответ написан
  • WHERE в SELECT SQL?

    tsklab
    @tsklab
    Здесь отвечаю на вопросы.
    SELECT `money` AS Today, CAST( NULL AS MONEY) AS Yesterday FROM `table`  WHERE date(`date`) = '2016-08-11'
    UNION
    SELECT NULL, `money` FROM `table`  WHERE date(`date`) = '2016-08-10'
    Ответ написан
    Комментировать
  • Dinstint по условию, возможно?

    tsklab
    @tsklab
    Здесь отвечаю на вопросы.
    SELECT 'test' FROM `messages` WHERE `sender`=1 or `receiver`=1 order by time DESC

    Подзапрос:
    SELECT MAX('id') FROM `messages` WHERE `sender`=1 or `receiver`=1


    Принцип диалогов в ВК
    Пока вы не приведёте (важнее даже для себя) задачу в терминах БД ничего не получится.
    Ответ написан
    3 комментария
  • Дизайн БД для сайта фильмо бд?

    tsklab
    @tsklab
    Здесь отвечаю на вопросы.
    Сейчас я планирую все видео (фильм, сериал) пихать в 1 таблицу с меткой типа.

    Все фильмы в одной таблице. По типам распределяется в представлении:
    CREATE TABLE [Film](
    	[ID] [int] IDENTITY(1,1) NOT NULL,
    	[Heading] [int] NULL,
    	[HeadingName] [varchar](20) NULL,
    	[HeadingClose] [bit] NULL,
    	[SeriesName] [varchar](15) NULL,
    	[Series] [smallint] NULL,
    	[SeriesDigit] [smallint] NULL,
    	[Season] [smallint] NULL,
    	[Episode] [smallint] NULL,
    	[PartName] [varchar](15) NULL,
    	[Part] [smallint] NULL,
    	[HeadingNumber]  AS (isnull(isnull([SeriesName]+' ','серия ')+CONVERT([varchar],[Series]),'')+isnull((('s'+right('00'+CONVERT([varchar],[Season]),(2)))+'e')+right('00'+CONVERT([varchar],[Episode]),(2)),'')),
    	[Serias] [smallint] NULL,
    	[Article] [varchar](20) NULL,
    	[Name] [varchar](200) NULL,
    	[NameTranslat] [varchar](200) NULL,
    	[Year] [smallint] NULL,
    	[Premiere] [smalldatetime] NULL,
    	[Country] [varchar](50) NULL,
    	[Addition] [varchar](200) NULL,
    	[TitleArticleLess]  AS ((([Name]+isnull((' ('+[NameTranslat])+')',''))+isnull((' ['+[Addition])+']',''))+isnull(((', '+isnull([PartName],'часть'))+' ')+CONVERT([varchar],[Part]),'')),
    	[TitleBase]  AS ((((isnull([Article]+' ','')+[Name])+isnull((' ('+[NameTranslat])+')',''))+isnull((' ['+[Addition])+']',''))+isnull(((', '+isnull([PartName],'часть'))+' ')+CONVERT([varchar],[Part]),'')),
    	[TitleYear]  AS (((((isnull([Article]+' ','')+[Name])+isnull((' ('+[NameTranslat])+')',''))+isnull((' ['+[Addition])+']',''))+isnull(((', '+isnull([PartName],'часть'))+' ')+CONVERT([varchar],[Part]),''))+isnull(' · '+CONVERT([varchar],[Year],(104)),'')),
    	[TitleCountry]  AS (((((isnull([Article]+' ','')+[Name])+isnull((' ('+[NameTranslat])+')',''))+isnull((' ['+[Addition])+']',''))+isnull(((', '+isnull([PartName],'часть'))+' ')+CONVERT([varchar],[Part]),''))+isnull(' · '+[Country],'')),
    	[TitleYearCountry]  AS ((((((isnull([Article]+' ','')+[Name])+isnull((' ('+[NameTranslat])+')',''))+isnull((' ['+[Addition])+']',''))+isnull(((', '+isnull([PartName],'часть'))+' ')+CONVERT([varchar],[Part]),''))+isnull(' · '+CONVERT([varchar],[Year],(104)),''))+isnull(' · '+[Country],'')),
    	[Cover] [image] NULL,
    	[Note] [text] NULL,
    	[NotWatch] [bit] NULL,
    	[LastWatch] [datetime] NULL,
    	[DateWatch] [datetime] NULL,
    	[WatchDisplay]  AS (isnull('+ '+CONVERT([varchar],[DateWatch],(104)),'')+isnull(case when [DateWatch] IS NULL then CONVERT([varchar],[LastWatch],(104)) else (' ('+CONVERT([varchar],[LastWatch],(104)))+')' end,'')),
    	[Range]  AS ((((((isnull(CONVERT([varchar](4),[Year]),'1895')+right('00'+CONVERT([varchar],isnull([Series],(0))),(3)))+right('00'+CONVERT([varchar],isnull([Season],(0))),(3)))+right('00'+CONVERT([varchar],isnull([Episode],(0))),(3)))+isnull(CONVERT([varchar](8),[Premiere],(112)),'00000000'))+right('00'+CONVERT([varchar],isnull([Part],(0))),(3)))+isnull(upper([Name]),'')),
    	[SearchValue]  AS (replace(rtrim([Name]),' ','+')),
    	[Icon]  AS (CONVERT([bit],isnull(datalength([Note]),(0)),(0))+CONVERT([bit],isnull(datalength([Cover]),(0)),(0))*(2)),
    	[AttributeIcon] [bit] NULL,
     CONSTRAINT [PK_Film] PRIMARY KEY CLUSTERED 
    (
    	[ID] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
    GO
    ALTER TABLE [Film] ADD  CONSTRAINT [DF_Film_AttributeIcon]  DEFAULT ((0)) FOR [AttributeIcon]
    GO
    ALTER TABLE [Film]  WITH CHECK ADD  CONSTRAINT [FK_Film_Film] FOREIGN KEY([Heading])
    REFERENCES [dbo].[Film] ([ID])
    GO
    ALTER TABLE [Film] CHECK CONSTRAINT [FK_Film_Film]
    GO

    Всех актеров, команду (режис., сценарист, и т.д.)

    Все атрибуты фильма в нескольких таблицах.
    Группы атрибутов
    CREATE TABLE [FilmAttributeGroup](
    	[ID] [smallint] IDENTITY(1,1) NOT NULL,
    	[Name] [varchar](50) NOT NULL,
    	[Person] [bit] NULL,
    	[Under] [bit] NULL,
    	[Range] [smallint] NOT NULL,
    	[Uses] [int] NOT NULL,
     CONSTRAINT [PK_FilmAttributeGroup] PRIMARY KEY CLUSTERED 
    (
    	[ID] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    ) ON [PRIMARY]
    GO
    ALTER TABLE [FilmAttributeGroup] ADD  CONSTRAINT [DF_FilmAttributeGroup_Range]  DEFAULT ((0)) FOR [Range]
    GO
    ALTER TABLE [FilmAttributeGroup] ADD  CONSTRAINT [DF_FilmAttributeGroup_Uses]  DEFAULT ((0)) FOR [Uses]
    GO

    Значения атрибутов
    CREATE TABLE [FilmAttributeValue](
    	[ID] [int] IDENTITY(1,1) NOT NULL,
    	[Group] [smallint] NOT NULL,
    	[Value] [varchar](300) NOT NULL,
    	[ValueLeft]  AS (rtrim(case when charindex('(',[Value])>(0) then left([Value],charindex('(',[Value])-(1)) else [Value] end)),
    	[ValueRight]  AS (rtrim(case when charindex('(',[Value])>(0) then substring([Value],charindex('(',[Value])+(1),(charindex(')',[Value])-charindex('(',[Value]))-(1))  end)),
    	[SearchValue]  AS (replace(rtrim(case when charindex('(',[Value])>(0) then left([Value],charindex('(',[Value])-(1)) else [Value] end),' ','+')),
    	[Person] [int] NULL,
    	[Equalize] [bit] NOT NULL,
    	[Uses] [int] NULL,
     CONSTRAINT [PK_FilmAttributeValue] PRIMARY KEY CLUSTERED 
    (
    	[ID] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    ) ON [PRIMARY]
    GO
    ALTER TABLE [FilmAttributeValue] ADD  CONSTRAINT [DF_FilmAttributeValue_Equalize]  DEFAULT ((1)) FOR [Equalize]
    GO
    ALTER TABLE [FilmAttributeValue]  WITH CHECK ADD  CONSTRAINT [FK_FilmAttributeValue_FilmAttributeGroup] FOREIGN KEY([Group])
    REFERENCES [dbo].[FilmAttributeGroup] ([ID])
    ON DELETE CASCADE
    GO
    ALTER TABLE [FilmAttributeValue] CHECK CONSTRAINT [FK_FilmAttributeValue_FilmAttributeGroup]
    GO
    ALTER TABLE [FilmAttributeValue]  WITH CHECK ADD  CONSTRAINT [FK_FilmAttributeValue_Person] FOREIGN KEY([Person])
    REFERENCES [dbo].[Person] ([ID])
    ON DELETE SET NULL
    GO
    ALTER TABLE [FilmAttributeValue] CHECK CONSTRAINT [FK_FilmAttributeValue_Person]
    GO

    Атрибуты фильма
    REATE TABLE [FilmAttribute](
    	[ID] [int] IDENTITY(1,1) NOT NULL,
    	[Film] [int] NOT NULL,
    	[Attribute] [int] NOT NULL,
    	[Addition] [varchar](250) NULL,
    	[GroupEdit] [int] NULL,
     CONSTRAINT [PK_FilmAttribute] PRIMARY KEY CLUSTERED 
    (
    	[ID] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    ) ON [PRIMARY]
    GO
    ALTER TABLE [FilmAttribute]  WITH CHECK ADD  CONSTRAINT [FK_FilmAttribute_Film] FOREIGN KEY([Film])
    REFERENCES [dbo].[Film] ([ID])
    GO
    ALTER TABLE [FilmAttribute] CHECK CONSTRAINT [FK_FilmAttribute_Film]
    GO
    ALTER TABLE [FilmAttribute]  WITH CHECK ADD  CONSTRAINT [FK_FilmAttribute_FilmAttributeValue] FOREIGN KEY([Attribute])
    REFERENCES [dbo].[FilmAttributeValue] ([ID])
    GO
    ALTER TABLE [FilmAttribute] CHECK CONSTRAINT [FK_FilmAttribute_FilmAttributeValue]
    GO

    Персоны
    CREATE TABLE [Person](
    	[ID] [int] IDENTITY(1,1) NOT NULL,
    	[FirstName] [varchar](100) NULL,
    	[LastName] [varchar](100) NOT NULL,
    	[NameRussian] [varchar](200) NULL,
    	[BirthDay] [smalldatetime] NULL,
    	[BirthPlace] [varchar](100) NULL,
    	[DeathDay] [smalldatetime] NULL,
    	[DeathPlace] [varchar](100) NULL,
    	[Text] [text] NULL,
    	[Picture] [image] NULL,
    	[Uses] [int] NULL,
    	[NameFull]  AS ((isnull([FirstName]+' ','')+ltrim([LastName]))+isnull((' ('+[NameRussian])+')','')),
    	[NameOrder]  AS ((ltrim([LastName])+isnull(', '+[FirstName],''))+isnull((' ('+[NameRussian])+')','')),
    	[SearchValue]  AS (isnull(replace([FirstName],' ','+')+'+','')+replace([LastName],' ','+')),
    	[NoteIcon]  AS (CONVERT([bit],isnull(datalength([Text]),(0)),(0))+CONVERT([bit],isnull(datalength([Picture]),(0)),(0))*(2)),
    	[Key]  AS ('P'+CONVERT([varchar],[ID])),
     CONSTRAINT [PK_Performer] PRIMARY KEY CLUSTERED 
    (
    	[ID] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
    GO
    ALTER TABLE [Person] ADD  CONSTRAINT [DF_Person_Uses]  DEFAULT ((0)) FOR [Uses]
    GO
    Ответ написан
    Комментировать
  • SQL SELECT article by tags?

    tsklab
    @tsklab
    Здесь отвечаю на вопросы.
    Но мне теперь еще нужно фильтр articles, что не имеют тега.

    SELECT articles.ID, articles.Name
      FROM articles LEFT OUTER JOIN  article_tags ON articles.ID = article_tags.article_id
      WHERE (article_tags.tag_id IS NULL)

    tag из перечиня
    Создаём таблицу этого перечня.
    CREATE TABLE [dbo].[tag_list](
    	[ID] [int] NULL,
    	[tag_id] [int] NULL
    ) ON [PRIMARY]

    И получаем нужный набор:
    SELECT DISTINCT articles.ID, articles.Name
      FROM articles INNER JOIN article_tags ON articles.ID = article_tags.article_id 
                             INNER JOIN tag_list ON article_tags.tag_id = tag_list.tag_id
    Ответ написан
    Комментировать
  • Как правильно построить поисковый запрос?

    tsklab
    @tsklab
    Здесь отвечаю на вопросы.
    написать клас на php
    Используйте инструментальные средства MS SQL (SSMS или SSDT) и помещайте запрос в хранимую процедуру для сохранения запроса на сервере.
    Ответ написан
  • Как выполнить sql update в 2 таблицах?

    tsklab
    @tsklab
    Здесь отвечаю на вопросы.
    Использовать триггер. Или построить представление.
    Ответ написан
    Комментировать
  • Запрос Select вывод одной и тойже строчки из столбца, несколько раз подряд??

    tsklab
    @tsklab
    Здесь отвечаю на вопросы.
    Правильный ответ:
    SELECT TOP (5) [table].Name
      FROM [table] CROSS JOIN [table] AS table_5_more_rows
      WHERE ([table].Name = 'Павел')
    Ответ написан
    Комментировать
  • Как правильно написать запрос с DISTINCT или GROUP BY?

    tsklab
    @tsklab
    Здесь отвечаю на вопросы.
    SELECT DISTINCT [trigger] FROM notification_role WHERE notification_role.role="curator"
    UNION 
    SELECT DISTINCT [trigger] FROM notification_user WHERE notification_user.user_id=15

    UNION и так собирает только уникальные атрибуты.
    UNION ALL — все.
    Ответ написан
    4 комментария