2012-11-19 23 views
0

得到DISTINCT日期值我有一個字段的表名爲開始日期和我想要做的是運行儘可能少的查詢儘可能獲得將顯示如下所示的列表:SQL從表中

2012 

January 
March 
October 

2011 

September 
November 

我想每年展示的唯一日期是有記錄的日期。

任何幫助或指針讚賞。

感謝

+0

您的意思是您只想顯示在表中找到不同的「月份」,或者您實際上是在尋找不同的「日期」值? –

+0

Distint月,我可以得到Distint幾個月和幾年,但是這些都在2個查詢中,我想幾乎將它們合併,以便每個不同的年份選擇當年的所有不同月份。 – ChrisBratherton

回答

0

使用PDO,你可以這樣做:

$dbh = new PDO("mysql:dbname=$dbname", $username, $password); 

$qry = $dbh->query(' 
    SELECT DISTINCT 
    YEAR(startdate)  AS year, 
    MONTHNAME(startdate) AS month 
    FROM 
    my_table 
    ORDER BY 
    startdate 
'); 

if ($qry) {  
    $row = $qry->fetch(); 
    while ($row) { 
    $current_year = $row['year']; 
    echo '<h1>',htmlentities($current_year),'</h1><ul>'; 
    do { 
     echo '<li>',htmlentities($row['month']),'</li>'; 
    } while ($row = $qry->fetch() and $row['year'] == $current_year); 
    echo '</ul>'; 
    } 
} 
2

此查詢可用於查找所有不同年份/表中的月組合給定日期(從這裏開始日期) 。

SELECT  YEAR(startdate) AS DYear, MONTH(startdate) AS DMonth 
FROM   tablename 
GROUP BY YEAR(startdate), MONTH(startdate) 

之後,你有你的結果早在你選擇的任何方式來獲得他們,你可以做這樣的事情:

$year = 0; 
    while ($row) { //loop through your rows here using while or foreach 
    if($year != $row['DYear']){ 
     echo '<h1>'.$row['DYear'].'</h1>'; 
     $year = $row['DYear']; 
    } 
    echo '<ul>'; 
    echo '<li>'.$row['DMonth'].'</li>'; 
    echo '</ul>'; 
    } 
+0

偉大的:)這確實給了我需要的結果,但是我想幫助我將這些結果安排成我想要的格式。目前,它返回一個數組,看起來像以下: 陣列 ( [1] =>數組 ( [d月] => 6 [d年] => 2010 ) [2] =>數組 ( [d月] => 10 [d年] => 2012 ) [3] =>數組 ( [d月] => 12 [d年] => 2010 ) ) 我將它傾向於如: Array([2010] => Arr ay([Month] => 6 [Month] => 12)[2012] => Array([Month] => 2010)) – ChrisBratherton

0
select distinct column1, column2, column3... from table where columnx <> "" order by year, month 
0
SELECT DISTINCT YEAR(startdate), MONTHNAME(startdate) 
FROM mytable 
ORDER BY YEAR(startdate) desc, MONTH(startdate) asc; 

應該做的伎倆,但輸出將成爲:

2012 January 
2012 March 
2012 October 
2011 September 
2011 November 

您可以使用由eggyal提供的代碼將其轉換爲您正在查找的格式。請注意,您將需要訂購有關月份和不MONTHNAME(除非你想按字母順序排列)

0

至於其他職位給你的答案,我會提供信息爲什麼這些答案的工作。

在SQL select語句中,您可以提供關鍵字。特別是對於MySQL,您可以提供ALL, DISTINCT, DISTINCTROW(以及與其他行無關的其他文件)。

後兩個選項實際上是相同的選項,併產生相同的結果。沒有關鍵字的默認選擇語句使用ALL,它返回所有結果。通過傳入DISTINCT可以消除任何重複的條目。

重複條目是所有字段都相同的條目但是,應該注意的是,如果您有自動遞增主鍵,則每行都與上一次不同,因爲pk不同。爲了使用這種設置選擇不同的值,您需要指定一個真正獨立的單獨列名。

有關MySQL SELECT語句的更多閱讀,請參閱users guide's select section

希望我沒有提供您已經從提供的答案中收集到的信息,但我總是發現理解「爲什麼」和「如何」經常讓我理解特定解決方案何時能夠工作以及何時將無法工作。