Почему в MySQL каждый действительный SELECT не является допустимым VIEW? - PullRequest
2 голосов
/ 25 марта 2011

Я хочу получить счет, сгруппированный по дням. Следующий SELECT работает нормально:

  SELECT COUNT( time_end ), 
         time_end
    FROM main
GROUP BY DAY( time_end )

Я копирую / вставляю это в форму создания ПРОСМОТРА phpmyadmin и получаю эту ошибку:

"# 1064 - у вас есть ошибка в синтаксисе SQL; обратитесь к руководству, соответствующему вашей версии сервера MySQL, чтобы узнать правильный синтаксис для использования около 'count (time_end)) AS SELECT count (time_end), time_end ИЗ основной ГРУППЫ ПО d ' в строке 4 "

Вот полный SQL, сгенерированный из формы phpmyadmin:

CREATE ALGORITHM = UNDEFINED VIEW `count by day` (
  time_end,
  count( time_end )
) AS SELECT COUNT( time_end ), 
            time_end
       FROM main
   GROUP BY DAY( time_end ) 

Что не так? Почему действительный SELECT не является автоматически действительным созданием VIEW? Спасибо.

Ответы [ 2 ]

4 голосов
/ 25 марта 2011

Не знаю, где phpMyAdmin получает этот синтаксис. Использование:

CREATE VIEW COUNT_BY_DAY AS
  SELECT COUNT( time_end ), 
         time_end
    FROM main
GROUP BY DAY( time_end )

Имейте в виду, что вы полагаетесь на Функциональность скрытого столбца MySQL - значение time_end будет произвольным (нельзя полагаться на то, что всегда будет возвращаться то же значение, что и число значений, из которых выбор увеличивается) , Он также не может быть перенесен на большинство баз данных, вам придется переписать его.

Кроме того, ваш счет будет искажен на 28 - 31 день, если вы не ограничиваетесь по месяцам. Не во всех месяцах есть 31 день.

2 голосов
/ 25 марта 2011

Единственное, что не так с вашим запросом, это то, что у вас есть имя столбца, которое не имеет обратной галочки.

CREATE ALGORITHM = UNDEFINED VIEW count by day (
`count (time_end)`# вам нужно было поставить это в обратных галочках
time_end,
) AS SELECT COUNT (time_end),
time_end
FROM main
GROUP BY DAY (time_end)

Для чего бы это ни было, у вас имена столбцов неправильные.

Используемый синтаксис - EXPLICIT NAMING имен столбцов представления.Это позволяет вам давать имена столбцам, которые иначе были бы получены из столбцов запроса, например,

CREATE VIEW X AS
SELECT time_end, other1
FROM main

:: X contains the columns `time_end` and `other1`

CREATE VIEW X ( TheStopTime, DataPoint ) AS
SELECT time_end, other1
FROM main

:: X contains the columns `TheStopTime` and `DataPoint`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...