Programing

월 및 연도 기준으로 만 mySQL 선택

crosscheck 2020. 9. 9. 07:32
반응형

월 및 연도 기준으로 만 mySQL 선택


mySQL DB에 일부 행이있는 열이 있습니다. 이 행 중 하나는 다음과 같이 DATE입니다.2012-02-01

내가 달성하고 싶은 것은 연도와 월만을 기준으로 PHP로 SELECT를 수행하는 것입니다.

SELECT의 논리는 다음과 같습니다.

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

특정 월과 연도는 다음 $_POST과 같이 변수 에서 전달됩니다.$_POST['period']="2012-02";

내가 어떻게 해?


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

당신이 가지고 있다면

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

먼저 매월 1 일을 찾습니다.

$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 
     " ;

보안 경고:

이러한 값을 적절하게 이스케이프하거나 준비된 문을 사용해야합니다. 요컨대, SQL 주입 문제를 피하기 위해 요즘 PHP에서 권장되는 방법을 사용하십시오.


여기 있습니다. 컴퓨팅을 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
    );

편집
유닉스 타임 스탬프 변환을 잊어 버렸습니다.


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

다음과 같이 할 수 있습니다.

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

여기 mySQL에서 MONTH 및 DATE 별 레코드 찾기

다음은 POST 값입니다. $_POST['period']="2012-02";

그냥 대시로 가치를 폭발 시키세요 $Period = explode('-',$_POST['period']);

분해 값에서 배열 가져 오기 :

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

SQL 쿼리에 값 입력 :

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

MONTH 및 YEAR별로 결과를 가져옵니다.


논리는 다음과 같습니다.

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

LIKE연산자로 시작하는 모든 행을 선택합니다 $_POST['period']대시 다음과 몽의 하루

http://dev.mysql.com/doc/refman/5.0/en/pattern-matching.html- 몇 가지 추가 정보


to get the month and year values from the date column

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

Suppose you have a database field created_at Where you take value from timestamp. You want to search by Year & Month from created_at date.

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

Here is a query that I use and it will return each record within a period as a sum.

Here is the code:

$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();
?>

This lists each emp_nr and the sum of the monthly hours that they have accumulated.


Yeah this is working, but it returns one row only while there is several rows to retrieve using selected columns only. Like SELECT Title,Date FROM mytable WHERE YEAR(Date)=2017 AND MONTH(Date)=09 returns only one row.

참고URL : https://stackoverflow.com/questions/9104704/select-mysql-based-only-on-month-and-year

반응형