0

私は呼び出したデータベースにこのテーブルを持っていますdata テーブルデータ

そして、私はこのSQLを作りたい

     $sql = mysql_query("SELECT $menucompare,( substr($menucompare, 13, 2)) AS dayname FROM data WHERE ... ");

オブス

    $menucompare // is variable which the date is selected from table(date or date2 or date3..) 

04/10/2012-(Tuesday)の週の下の6テーブルからこの日付がw_dateあるとしましょうTu

第 7 週には 2 つの日付があります。私が欲しいのは、曜日ごとに並べられた曜日名を毎週出力することです

そのような例

  week 7

   Tu
   Fr
   .
   .

また

week 6
Tu
.
.

これは起こりえますか?WHEREここに特別な条項はありますか? そして、週にいくつの日付があるかを計算するSQLを書くことは可能ですか?たとえば、第7週にいくつの日付があり、上の表には第7週に2があります

4

1 に答える 1

1

ここでいくつかの異なる質問をしましたが、それらに直接対処する前に、(可能であれば)date列のデータ型をその型に変更してから、最初の取得DATEなどの関数を使用することを検討する価値があるかもしれません。DATE_FORMAT(`date`, "%a")関連する日の名前の文字。

また、別の言語の変数をSQLステートメントに挿入するときは、悪意のあるSQLインジェクションを回避するように十分注意してください。プリペアドステートメントの使用を検討してください。残念ながら、この場合、データベースの設計が原因で別の問題が発生します。詳細については、この質問を参照してください。

あなたの質問に:

  1. これ[表示されている出力例]は発生しますか?

    はい、できます。結果を「グループ化」したいので、ステートメントのGROUP BY句を見てください。SELECT次のようなコマンドを試してください。

    SELECT
      `w_date`,
      GROUP_CONCAT(SUBSTR(`date`, 13, 2) SEPARATOR "\n") AS `daynames`
    FROM `data`
    WHERE ...
    GROUP BY `w_date`;
    

    ご覧のとおり、結果は希望どおりにグループ化されていますが、日の省略形のリストは、週番号とは別の結果列です。示されているようにデータを正確に出力するには、アプリケーションレベルで実行する必要のあるさらなる操作が必要です。

  2. 週にいくつの日付があるかを計算して、たとえば第7週にいくつの日付があるかを計算するSQLを書くことは可能ですか?

    そのとおり。特定の週のレコードの総数を取得するには、次のようにします。

    SELECT COUNT(*) FROM `data` WHERE `w_date` = 7;
    

    または、特定の週内の個別の日数について:

    SELECT COUNT(DISTINCT `date`) FROM `data` WHERE `w_date` = 7;
    

    または毎週そのようなものを入手するには:

    SELECT `w_date`, COUNT(*) FROM `data` GROUP BY `w_date`;
    
于 2012-04-22T21:21:11.417 に答える