0

startdate という名前のテーブルにフィールドがあり、次のように表示されるリストを取得するために、できるだけ少ないクエリを実行したいと考えています。

2012

January
March
October

2011

September
November

毎年表示したい日付は、記録がある日付だけです。

ヘルプやポインタをいただければ幸いです。

ありがとう

4

5 に答える 5

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>';
  }
于 2012-11-19T13:37:42.413 に答える
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>';
  }
}
于 2012-11-19T13:37:00.543 に答える
0
select distinct column1, column2, column3... from table where columnx <> "" order by year, month
于 2012-11-19T13:38:58.067 に答える
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

egyal が提供するコードを使用して、これを探している形式に変換できます。MONTHNAME ではなく MONTH で注文する必要があることに注意してください (アルファベット順を希望する場合を除く)。

于 2012-11-19T13:57:06.120 に答える
0

他の投稿で回答が得られたので、これらの回答が機能する理由に関する情報を提供します。

SQL 選択ステートメントでは、キーワードを指定できます。特にMySQLの場合、提供できますALL, DISTINCT, DISTINCTROW(および個別の行に関係のないその他のもの)。

後者の 2 つのオプションは、実際には同じオプションであり、同じ結果が得られます。ALLすべての結果を返すキーワードを使用しないデフォルトの select ステートメント。渡すことでDISTINCT、重複するエントリを排除します。

重複エントリは、すべてのフィールドが同じエントリですが、自動インクリメント主キーがある場合、pk が異なるため、各行は最後の行とは異なることに注意してください。この種のセットアップで個別の値を選択するには、真に個別の列名を指定する必要があります。

MySQL SELECT ステートメントの詳細については、ユーザー ガイドの select セクションを参照してください。

提供された回答から既に収集した情報を提供していないことを願っていますが、「なぜ」と「どのように」を理解することで、特定のソリューションがいつ機能するか、機能しないかを理解できることがよくあります.

于 2012-11-19T14:00:49.200 に答える