2009-09-08 7 views
1

날짜가있는 항목의 mysql 데이터베이스가 있습니다. 그래서 내가 원하는 것은 내 데이터베이스에 모든 날짜를 표시하고 각 날짜 아래에, 데이터베이스에있는 모든 항목을 특별한 날짜에 입력하고 싶습니다. 나는 두 개의 루프를 생각하고 있지만 그 날짜 아래 엔트리를 반복하기 전에 데이터베이스에 모든 날짜를 표시하는 조건을 작성하는 방법을 모르겠습니다.mysql 데이터 루핑

편집 : 날짜를 저장하는 데 NOW()를 사용했습니다. longneck으로 루프를 사용하면 이전 날짜가 이전과 동일한 지 확인하는 시간을 어떻게 무시할 수 있습니까? 폭발해야합니까? 가장 좋은 방법은 뭔가요?

답변

4

당신은 하나의 쿼리를 사용하여 날짜를 정렬하고 다음 날짜를 표시하는 신호로 날짜의 변화를 감지해야합니다

<?php 

$sql = 'select start_date, name from events order by start_date'; 

$res = mysql_query($sql) or die(mysql_error()); 

$prev_date = null; 

while ($row = mysql_fetch_assoc($res)) { 
    if ($row['start_date'] != $prev_date) { 
    echo "<h1>{$row['start_date']}</h1>"\n; 
    $prev_date = $row['start_Date']; 
    } 

    echo "<p>{$row['name']}</p>"; 
} 

?> 
+0

+1 이것은 내가 자주하는 일이기도합니다. BTW, PHP 배열 키는 대소 문자를 구별하지만 위의 경우에는 'start_Date'를 사용합니다. –

+0

"start_date, name"의 Name은 무엇입니까? – Strawberry

+0

대기,이 전류는 날짜를 h1로 표시 한 다음 그 날짜 아래에만 1 개의 항목 만 표시합니다. 해당 날짜의 모든 항목을 표시하고 싶습니다. 예. 2007 년 1 월 6 일 엔트리 1, 엔트리 2, 엔트리 3 – Strawberry

1

각 날짜의 항목에 대해 별도의 쿼리를 수행 할 수 있도록 날짜 목록을 원한다고 가정합니다. 일반적으로이 같은 쿼리를 사용합니다 : 이제

를 (그것이 가장 오래된 최초 있도록 DESC을 제거,이 최신 우선 그것을 할 것입니다)

SELECT DISTINCT date_field FROM table_name ORDER BY date_field DESC 

을, 당신은 아마 이런 식으로하고 싶지 않아 왜냐하면 많은 쿼리 (매일 엔트리 당 하나씩)가 필요할 것이기 때문입니다. 날짜별로 항목을 정렬 한 다음 PHP에서 논리를 사용하여 헤더를 인쇄하는 것이 더 효율적입니다. 당신은 아마 당신의 SQL 문에 그것을 얻고 싶은 것

$result = $db->query("SELECT * FROM table_name ORDER BY date_field DESC"); 
$current_date = ""; 
while ($row = $result->fetch_array()) { 
    if ($current_date != $row["date_field"]) { 
     echo "<h3>{$row['date_field']}</h3>"; 
     $current_date = $row["date_field"]; 
    } 
    // Print your entry from $row here. 
} 
0

: 같은 당신이 코드를 사용하는 것이 테이블 FROM

SELECT * (가정이 날짜 타입) WHERE 2009-2010을 '간의 날 9-8 0시 0분 0초 'AND'2008년 9월 8일 23시 59분 59초 '

그런 다음 결과를 통해 정상 루프를 할

+0

죄송합니다. 처음에 질문을 오해했습니다. 아마 모든 날짜를 반복 할 수 있고 jamuraa의 DISTINCT 메서드를 사용하여 목록에 나열 할 수 있습니다. – kilrizzy

0

는 또한 SELECT 문의 GROUPBY 절에서 봐 가지고 있습니다.