2013-05-26 4 views
2

나는 PHP와 MySQL 프로그래밍에 익숙하지 않으며 날짜 관련 질문이 있습니다.루프를 사용하여 MySQL에서 날짜 찾기

표에 날짜를 저장하는 날짜 필드가

예를 들어 2013-05-27, 2013-05-24, 2013-05-22 내가 추가 처리를 위해 최신 삼일 데이터를 검색 할 필요가

먼저 찾을 수없는 경우 다음, 오늘 날짜를 찾을 수있다 찾을 수없는 경우 등 어제의 데이터 그럼 난 아래의 코드가 전에, 다음 날짜를 찾아 어제의 데이터를 찾습니다 : 루프가 실행되지 않는 것처럼 그러나

$date1=date('Y-m-d'); 
$date1_1=""; 
$datefound=""; 
while($datefound <> ""){ 
    $date1_1_1 = mysql_query("SELECT * FROM jom_c1 where date ='" .$date1. "'"); 
    if($date1_1_1){ 
    $datefound = $date1; 
}else{ 
    $date1 = date('Y-m-d', strtotime($date . ' - 1 day')); 
} 
} 
echo $datefound; 
?> 

를, 누군가가 나에게 줄 수 있다면 많은 감사 보인다그것과의 암시. 오히려 반복보다는

당신은 제대로 SQL을 사용하는 것이 좋습니다

답변

5

, 즉

select * from jom_c1 where date <= curdate() order by date desc limit 3 

.

은 (즉시 날짜가 발견 될 때, 멈출 때문에 귀하의 루프가 많이 실행되지 않습니다)

+0

쿼리 결과를 정렬하지 않고도 작동합니까? – Mifeet

+0

@Mifeet 가능하지 않음. 내가 명시 적으로 정렬을 추가했습니다 – podiluska

0

그동안 블록이 실행되지 않는 이유는 $datefound=""을 설정하는 것이하지만 당신의 상태는 while ($datefound<>"")입니다. 최신 세 날짜를 찾고 있다면 다음 LIMIT 3를 사용하는 대신,

SELECT * FROM jom_c1 WHERE date <= CURDATE() ORDER BY date DESC LIMIT 1 

:

0

당신이 jom_c1의 기록이 가장 최근의 날짜를 찾고 있다면, 다음과 같은 쿼리를 시도 LIMIT 1.

PHP의 코드는 다음과 같습니다 mysql_query 그러나, deprecated입니다

$datefound = ""; 
$result = mysql_query('SELECT * FROM jom_c1 WHERE date <= CURDATE() ORDER BY date DESC LIMIT 1'); 
if ($result && mysql_num_rows($result) > 0) { 
    $row = mysql_fetch_assoc($result); 
    $datefound = $row['date']; 
} 
echo $datefound; 

하는 것으로.


편집 :

SELECT DISTINCT date FROM jom_c1 WHERE date <= CURDATE() ORDER BY date DESC LIMIT 1 

고유 중복 기록을 남겨 둘 것이다 : 하루 동안 여러 레코드가 경우, 다음 쿼리를 사용합니다.

+0

대단히 도움을 주셔서 감사합니다, 나는 시도했다. 하지만 한가지, 우리는 하루에 16 개의 레코드를 가지고 있는데, 같은 "날짜"를 가진 배열에 1 개의 레코드 만 저장하도록 그룹화 할 수 있습니까? –

+0

예, 내 업데이트 답변을 참조하십시오. – Mifeet

+0

대단히 감사 드려요. 그러나 LIMIT 3을 사용해 본 결과, 2 개의 레코드 만 표시됩니다. Array ([date] => 2013-05-22) Array ([date] => 2013-05-21) 2013-05-23 있습니다. 내가 뭐 잘못 했니? –