Это помогло мне понять всю проблему:
И в следующем примере проблемного запроса.
Проблемный:
SELECT COUNT(*) as attempts, SUM(elapsed) as elapsedtotal, userid, timestamp, questionid, answerid, SUM(correct) as correct, elapsed, ipaddress FROM `gameplay`
WHERE timestamp >= DATE_SUB(NOW(), INTERVAL 1 DAY)
AND cookieid = #
Решено путем добавления этого в конец:
GROUP BY timestamp, userid, cookieid, questionid, answerid, elapsed, ipaddress
Примечание: см. сообщение об ошибке в PHP , он сообщает вам, где проблема.
Пример:
Ошибка запроса MySQL 1140: в агрегированном запросе без GROUP BY выражение # 4 списка SELECT содержит неагрегированный столбец ' db.gameplay.timestamp '; это несовместимо с sql_mode = only_full_group_by - Query: SELECT COUNT (*) в качестве попыток, SUM (истек) как elapsedtotal, userid, timestamp, questionid, answerid, SUM (правильный) как правильный, истекший, ipaddress FROM gameplay WHERE timestamp> = DATE_SUB (NOW (), INTERVAL 1 DAY) И userid = 1
В этом случае выражение # 4 отсутствовало в GROUP BY.
Отличным примером C # для декларативного и императивного программирования является LINQ.
С обязательным программированием вы сообщаете компилятору, что вы хотите, шаг за шагом.
Например , давайте начнем с этой коллекции и выберем нечетные числа:
List<int> collection = new List<int> { 1, 2, 3, 4, 5 };
С императивным программированием мы пройдем через это и решим, чего хотим:
List<int> results = new List<int>();
foreach(var num in collection)
{
if (num % 2 != 0)
results.Add(num);
}
Здесь мы говорим:
С декларативным программированием, с другой стороны, вы пишете код, который описывает то, что вы хотите, но не обязательно, как его получить (объявите желаемые результаты, но не шаг за шагом):
var results = collection.Where( num => num % 2 != 0);
Здесь мы говорим «Дайте нам все, где это странно», а не «Пройдите через коллекцию». Проверьте этот элемент, если он нечетный, добавьте его в сбор результатов. "
Во многих случаях код будет представлять собой смесь обоих образцов, так что это не всегда blac K-белый.
Я добавлю еще один пример, который редко появляется в декларативном / обязательном программировании: Пользовательский интерфейс!
В C # вы можете создавать пользовательский интерфейс с использованием различных технологий.
В крайнем случае вы можете использовать DirectX или OpenGL, чтобы очень настоятельно нарисовать свои кнопки, флажки и т. Д. ... по очереди (или действительно, треугольник по треугольнику). Вы должны сказать, как рисовать пользовательский интерфейс.
В декларативном конце у вас есть WPF. Вы в основном пишете XML (да, да, «XAML» технически), и структура работает для вас. Вы говорите, как выглядит пользовательский интерфейс. Это зависит от системы, чтобы понять, как это сделать.
В любом случае, это еще одна вещь, о которой нужно подумать. Только потому, что один язык является декларативным или императивным, это не означает, что у него нет определенных функций другого.
Кроме того, одним из преимуществ декларативного программирования является то, что цель обычно легче понять из чтения кода, тогда как
Суть всего этого:
Декларативный -> what
вы хотите сделать
Imperative -> how
вы хотите это сделать
Императивное программирование требует от разработчиков определять шаг за шагом, как должен выполняться код. Чтобы дать указания в императивной манере, вы говорите: «Идите на 1-ю улицу, поверните налево на главный, пройдите два блока, поверните направо на Клен и остановитесь в третьем доме слева». В декларативной версии может звучать что-то вроде этого : «Поезжайте в дом Сью». Говорят, как что-то делать; другой говорит, что нужно сделать.
Декларативный стиль имеет два преимущества по отношению к императивному стилю:
blockquote>
- Это не заставляет путешественника запоминать длинный набор инструкций .
- Позволяет путешественнику оптимизировать маршрут, когда это возможно.
Calvert, C Kulkarni, D (2009). Основной LINQ. Эддисон Уэсли. 48.