UFO ET IT

오늘, 이번 주, 이번 달에서 레코드 선택 php mysql

ufoet 2020. 11. 15. 12:09
반응형

오늘, 이번 주, 이번 달에서 레코드 선택 php mysql


나는 이것이 매우 간단하다고 생각하지만 그것을 알아낼 수 없습니다. 오늘, 이번 주, 이번 달에 mysql db의 테이블에서 선택한 결과를 포함하는 몇 페이지를 만들려고합니다. 날짜는로 레코드가 생성 될 때 입력됩니다 date('Y-m-d H:i:s');. 지금까지 내가 가진 내용은 다음과 같습니다.

날짜> (날짜-(60 * 60 * 24))

 "SELECT * FROM jokes WHERE date>(date-(60*60*24)) ORDER BY score DESC"

여기서 date> (date- (60 * 60 * 24 * 7))

 "SELECT * FROM jokes WHERE date>(date-(60*60*24*7)) ORDER BY score DESC"

월 (30 일) 여기서 date> (date- (60 * 60 * 24 * 30))

 "SELECT * FROM jokes WHERE date>(date-(60*60*24*30)) ORDER BY score DESC"

어떤 아이디어라도 대단히 감사하겠습니다. 감사!


날짜 열이 실제 MySQL 날짜 열이라고 가정합니다.

SELECT * FROM jokes WHERE date > DATE_SUB(NOW(), INTERVAL 1 DAY) ORDER BY score DESC;        
SELECT * FROM jokes WHERE date > DATE_SUB(NOW(), INTERVAL 1 WEEK) ORDER BY score DESC;
SELECT * FROM jokes WHERE date > DATE_SUB(NOW(), INTERVAL 1 MONTH) ORDER BY score DESC;

날짜 및 시간 함수 (MONTH (), YEAR (), DAY (), MySQL Manual )를 사용해보십시오.

이번 주:

SELECT * FROM jokes WHERE WEEKOFYEAR(date)=WEEKOFYEAR(NOW());

지난주:

SELECT * FROM jokes WHERE WEEKOFYEAR(date)=WEEKOFYEAR(NOW())-1;

이번 달:

SELECT * FROM jokes WHERE YEAR(date) = YEAR(NOW()) AND MONTH(date)=MONTH(NOW());

이번 주 :

SELECT * FROM jokes WHERE WEEKOFYEAR(date) = WEEKOFYEAR(NOW());

오늘날:

SELECT * FROM jokes WHERE YEAR(date) = YEAR(NOW()) AND MONTH(date) = MONTH(NOW()) AND DAY(date) = DAY(NOW());

이것은 이번 달, 실제로는 주, 실제로는 오늘만 선택됩니다 :-)


Nathan의 대답은 오늘, 이번 주, 이번 달의 농담이 아니라 지난 24, 168, 744 시간의 농담을 제공합니다. 그게 당신이 원하는 거라면, 좋지만 당신은 뭔가 다른 것을 찾고있을 것 같아요.

그의 코드를 사용하면 정오에 어제 정오에 시작하여 오늘 정오에 끝나는 농담을 얻을 수 있습니다. 오늘의 농담을 정말로 원한다면 다음을 시도하십시오.

SELECT * FROM jokes WHERE date >= CURRENT_DATE() ORDER BY score DESC;  

이번 주, 월 등과는 조금 다른 일을해야하지만 아이디어를 얻습니다.


모두가 날짜를 표의 열이라고 언급하는 것 같습니다.
나는 이것이 좋은 습관이라고 생각하지 않습니다. date라는 단어는 일부 코딩 언어 (오라클 일 수도 있음)의 키워드 일 수 있으므로 columnname date를 JDate로 변경하십시오.
따라서 다음이 더 잘 작동 할 것입니다.

SELECT * FROM jokes WHERE JDate >= CURRENT_DATE() ORDER BY JScore DESC;

따라서 JScore 및 JDate 열이있는 Jokes라는 테이블이 있습니다.


"오늘"을위한 더 나은 솔루션은 다음과 같습니다.

SELECT * FROM jokes WHERE DATE(date) = DATE(NOW())

Nathan의 대답은 매우 가깝지만 부동 결과 집합을 반환합니다. 시간이 이동함에 따라 레코드는 결과 집합에서 위로 떠오를 것입니다. DATE()on 함수를 사용하면 NOW()날짜에서 시간 요소가 제거되어 정적 결과 집합이 생성됩니다. 실제 대신 date()함수가 적용 되기 때문에 날짜 열과 같은 함수를 적용하면 MySql의 인덱스 사용 기능이 제한되므로 성능이 높아야합니다 .now()datedate()

결과 세트를 정적으로 유지하려면 다음을 수행하십시오.

SELECT * FROM jokes WHERE date > DATE_SUB(DATE(NOW()), INTERVAL 1 DAY) 
ORDER BY score DESC;

SELECT * FROM jokes WHERE date > DATE_SUB(DATE(NOW()), INTERVAL 1 WEEK) 
ORDER BY score DESC;

SELECT * FROM jokes WHERE date > DATE_SUB(DATE(NOW()), INTERVAL 1 MONTH) 
ORDER BY score DESC;

이 솔루션은 이번 달, 이번 주, 오늘만 선택하는 데 도움이됩니다.

SELECT * FROM games WHERE games.published_gm = 1 AND YEAR(addedon_gm) = YEAR(NOW()) AND MONTH(addedon_gm) = MONTH(NOW()) AND DAY(addedon_gm) = DAY(NOW()) ORDER BY addedon_gm DESC;

주간 추가 게시물의 경우 :

WEEKOFYEAR(addedon_gm) = WEEKOFYEAR(NOW())

월간 추가 게시물 :

MONTH(addedon_gm) = MONTH(NOW())

매년 추가되는 게시물 :

YEAR(addedon_gm) = YEAR(NOW())

you'll get the accurate results where show only the games added today, otherwise you may display: "No New Games Found For Today". Using ShowIF recordset is empty transaction.


I think using NOW() function is incorrect for getting time difference. Because by NOW() function every time your are calculating the past 24 hours. You must use CURDATE() instead.

    function your_function($time, $your_date) {
    if ($time == 'today') {
        $timeSQL = ' Date($your_date)= CURDATE()';
    }
    if ($time == 'week') {
        $timeSQL = ' YEARWEEK($your_date)= YEARWEEK(CURDATE())';
    }
    if ($time == 'month') {
        $timeSQL = ' Year($your_date)=Year(CURDATE()) AND Month(`your_date`)= Month(CURDATE())';
    }

    $Sql = "SELECT * FROM jokes WHERE ".$timeSQL
    return $Result = $this->db->query($Sql)->result_array();
}

To get last week's data in MySQL. This works for me even across the year boundries.

select * from orders_order where YEARWEEK(my_date_field)= YEARWEEK(DATE_SUB(CURRENT_DATE(), INTERVAL 1 WEEK));

To get current week's data

select * from orders_order where YEARWEEK(date_sold)= YEARWEEK(CURRENT_DATE());

You can do same thing using single query

SELECT sum(if(DATE(dDate)=DATE(CURRENT_TIMESTAMP),earning,null)) astodays,
       sum(if(YEARWEEK(dDate)=YEARWEEK(CURRENT_DATE),earning,null)) as weeks, 
       IF((MONTH(dDate) = MONTH(CURRENT_TIMESTAMP()) AND YEAR(dDate) = YEAR(CURRENT_TIMESTAMP())),sum(earning),0) AS months,
       IF(YEAR(dDate) = YEAR(CURRENT_TIMESTAMP()),sum(earning),0) AS years, 
       sum(fAdminFinalEarning) as total_earning FROM `earning`

Hope this works.

참고URL : https://stackoverflow.com/questions/5293189/select-records-from-today-this-week-this-month-php-mysql

반응형