Я хочу быть в состоянии принести результаты mysql с заявлением как это:
SELECT *
FROM table
WHERE amount > 1000
Но я хочу принести результат, ограниченный к определенному месяц и год (на основе входа от пользователя)... Я пробовал как это:
SELECT *
FROM table
WHERE amount > 1000
AND dateStart = MONTH('$m')
...$m
будучи месяцем, но это дало ошибку.
В том столе у этого на самом деле есть две даты: startDate
и endDate
но я сосредотачиваюсь на startDate
. Входные ценности были бы месяцем и годом. Как я выражаю заявление SQL, которое получает результаты на основе того месяца того года?
Вы были закрыты - получили сравнение обратно (при условии StartDate
- это тип данных DateTime или Timestamp):
SELECT *
FROM table
WHERE amount > 1000
AND MONTH(dateStart) = {$m}
, потому что использование функций на столбцах не может использовать индексы, можно использовать лучший подход
и функции STR_TO_DATE
:
WHERE startdate BETWEEN STR_TO_DATE([start_date], [format])
AND STR_TO_DATE([end_date], [format])
см. Документацию для форматирования синтаксиса.
, Например.
$date = sprintf("'%04d-%02d-01'", $year, $month);
$query = "
SELECT
x,y,dateStart
FROM
tablename
WHERE
AND amount > 1000
AND dateStart >= $date
AND dateStart < $date+Interval 1 month
";
mysql_query($query, ...
Это приведет к созданию запроса, например,
WHERE
AND amount > 1000
AND dateStart >= '2010-01-01'
AND dateStart < '2010-01-01'+Interval 1 month
+ Интервал 1 месяц
является альтернативой дата _ добавить () .
SELECT Date ('2010-01-01' + интервал 1 месяц)
- > 2010-02-01
SELECT Date ('2010-12-01' + интервал 1 месяц)
- > 2011-01-01
Это пути всегда получать первый день следующего месяца. Записи, которые вы хотите, должны иметь значение dateStart до этой даты, но после/равно первому дню месяца (и года), который вы передали sprintf ().
'2010-01-01' + Интервал 1 месяц
не изменяется между строками. MySQL вычислит термин только один раз и может использовать индексы для поиска.
Почему GCC оптимизирует так плохо для такой общей операции?
Prelude: С конца 1980-х годов фокус на оптимизацию компилятора отошел от микробенчевок, которые сосредоточены на индивидуальных операциях и в направлении MacrObenchmarks , которые сосредоточены на приложениях. В наши дни большинство писателей компилятора сосредоточены на Macrobenchmarks, и разработка хороших бенчарных люксов - это то, что воспринимается серьезно.
Ответ : Никто на GCC не использует ориентир, где разница между или
и BTS
имеет значение для времени выполнения реальной программы. Если вы можете произвести такую программу, вы сможете привлечь внимание людей в GCC-земле.
Я делаю что-то не так с версией C?
Нет, это совершенно хороший стандарт C. очень читаемый и идиоматический, на самом деле.
-121--2702149- Используйте функцию месяц ()
.
select month(now());
Попробуйте это:
SELECT *
FROM table
WHERE amount > 1000 AND MONTH(dateStart) = MONTH('$m') AND YEAR(dateStart) = YEAR('$m')