Подтвердить что ты не робот

Выберите mySQL только на месяц и год

У меня есть столбец в моей базе данных mySQL с несколькими строками. Одна из этих строк - DATE, например: 2012-02-01

То, что я хочу достичь, - это сделать SELECT с PHP на основе только года и месяца.

Логика SELECT будет следующей:

$q="SELECT * FROM projects WHERE Date="SELECT HERE THE SPECIFIC YEAR AND MONTH"";

Конкретный месяц и год будут передаваться из переменной $_POST, например, $_POST['period']="2012-02";

Как я могу это сделать?

4b9b3361

Ответ 1

SELECT * FROM projects WHERE YEAR(Date) = 2011 AND MONTH(Date) = 5

Ответ 2

Если у вас есть

$_POST['period'] = "2012-02";

Сначала найдите первый день месяца:

$first_day = $_POST['period'] . "-01"

Тогда этот запрос будет использовать индекс по Date если он у вас есть:

$q = "
    SELECT *  
    FROM projects 
    WHERE Date BETWEEN '$first_day' 
                   AND LAST_DAY( '$first_day' )
     " ;

Можно также использовать инклюзивно-исключительные интервалы, которые работают довольно хорошо (вам не нужно беспокоиться о столбце DATE, DATETIME или TIMESTAMP или о точности:

$q = "
    SELECT *  
    FROM projects 
    WHERE Date >= '$first_day' 
      AND Date  < '$first_day' + INTERVAL 1 MONTH 
     " ;

Предупреждение безопасности:

Вы должны правильно избегать этих значений или использовать подготовленные операторы. Короче говоря, используйте любой метод, рекомендуемый в наши дни в PHP, чтобы избежать проблем с SQL-инъекцией.

Ответ 3

Здесь вы идете. Оставьте вычисления на PHP и сохраните свою работу DB. Таким образом, вы можете эффективно использовать индекс в столбце Date.

<?php
    $date = $_POST['period'];

    $start = strtotime($date);
    $end   = strtotime($date . ' 1 month - 1 second');

    $query = sprintf(
        'SELECT *
           FROM projects
          WHERE Date BETWEEN FROM_UNIXTIME(%u) AND FROM_UNIXTIME(%u)',
        $start,
        $end
    );

ИЗМЕНИТЬ
Забыл преобразование временной метки Unix.

Ответ 4

$q="SELECT * FROM projects WHERE YEAR(date) = 2012 AND MONTH(date) = 1;

Ответ 5

Вы можете сделать следующее:

$q="SELECT * FROM projects WHERE Year(Date) = '$year' and Month(Date) = '$month'";

Ответ 6

Здесь запись FIND по MONTH и DATE в mySQL

Вот ваше значение POST $_POST['period']="2012-02";

Просто взорвите значение тире $Period = explode('-',$_POST['period']);

Получить массив из значения разрыва:

Array ( [0] => 2012 [1] => 02 )

Поместить значение в SQL Query:

SELECT * FROM projects WHERE YEAR(Date) = '".$Period[0]."' AND Month(Date) = '".$Period[0]."';

Получите результат MONTH и YEAR.

Ответ 7

Логика будет:

SELECT * FROM objects WHERE Date LIKE '$_POST[period]-%';

Оператор LIKE выберет все строки, начинающиеся с $_POST['period'], за которыми следуют тире и день mont

http://dev.mysql.com/doc/refman/5.0/en/pattern-matching.html - Дополнительная информация

Ответ 8

чтобы получить значения месяца и года из столбца даты

select year(Date) as "year", month(Date) as "month" from Projects

Ответ 9

Вот запрос, который я использую, и он будет возвращать каждую запись в течение периода в виде суммы.

Вот код:

$result = mysqli_query($conn,"SELECT emp_nr, SUM(az) 
FROM az_konto 
WHERE date BETWEEN '2018-01-01 00:00:00' AND '2018-01-31 23:59:59' 
GROUP BY emp_nr ASC");

echo "<table border='1'>
<tr>
<th>Mitarbeiter NR</th>
<th>Stunden im Monat</th>
</tr>";

while($row = mysqli_fetch_array($result))
{
$emp_nr=$row['emp_nr'];
$az=$row['SUM(az)'];
echo "<tr>";
echo "<td>" . $emp_nr . "</td>";
echo "<td>" . $az . "</td>";
echo "</tr>";
}
echo "</table>";
$conn->close();
?>

Здесь перечислены все emp_nr и сумма месячных часов, которые они накопили.

Ответ 10

Предположим, у вас есть поле базы данных create_at, где вы берете значение из отметки времени. Вы хотите выполнить поиск по году и месяцу с даты создания.

YEAR(date(created_at))=2019 AND MONTH(date(created_at))=2

Ответ 11

Да, это работает, но он возвращает только одну строку, только если несколько строк извлекаются только с использованием выбранных столбцов. Как SELECT Title, Date FROM mytable ГДЕ ГОД (дата) = 2017 И МЕСЯЦ (дата) = 09 возвращает только одну строку.