1

彼ら!日付の間で明確な行を選択し、それらを適切に並べ替えることに遭遇したことはありません。php + mysql スクリプトをどのように整理すればよいかを理解するには、どんな助けも非常に役立ちます。

mktime() 形式の日付列を持つ行を含むテーブルがあります。このテーブルには、私の Web サイトの広告へのクリックの情報が格納されます。

これは私のclicks_logテーブルの構造です: 1) ID - 自動インクリメントの行の一意の ID。2) DATE - 誰かがリンクをクリックしたときの mktime 形式の日付。3) IP - リンクをクリックした訪問者の IP アドレス。

clicks_logテーブルからすべての情報を選択し、次のようにページに表示したい:

日付: 15.04.2011

  1. IP アドレス: 192.168.0.1。日付: 08:45、15.04.2011
  2. IP アドレス: 192.168.0.2。日付: 13:22、15.04.2011
  3. IP アドレス: 192.168.0.3。日付: 18:58、15.04.2011

日付: 16.04.2011

  1. IP アドレス: 192.168.0.1。日付: 04:14、16.04.2011
  2. IP アドレス: 192.168.0.2。日付: 09:35、16.04.2011
  3. IP アドレス: 192.168.0.3。日付: 14:11、16.04.2011

日付: 17.04.2011

  1. IP アドレス: 192.168.0.1。日付: 21:56, 17.04.2011
  2. IP アドレス: 192.168.0.2。日付: 23:04、17.04.2011
  3. IP アドレス: 192.168.0.3。日付: 23:13, 17.04.2011
4

4 に答える 4

2

ORDER BY結果を日付順に並べ替えるには、句を使用する必要があります。

SELECT *
FROM `clicks_log`
ORDER BY `date` ASC;

次に、日付列の値を 2 番目のパラメーターとして渡すPHP 日付関数を使用できます。

// Get the first date
$dateSection = ...;
while ($row = mysql_fetch_assoc($result)) {
    ...

    // Check here if the date header has changed to begin a new section
    $dateHeader = date("d.m.Y", $row['date']);
    if ( $dateHeader !== $dateSection ) {
        // Build new section header here
        ...
        $dateSection = $dateHeader;
    }

    ...
    echo $row['ip'];
    ...
    echo date("H:i, d.m.Y", $row['date']);
    ...
}

$dateSectionおよび変数を取得するコードは省略しました$resultが、PHP ドキュメントには多くの例があります。

于 2011-04-17T11:39:36.450 に答える
0

1 つのクエリでデータをフェッチするか (私が提案すること)、3 つのクエリを使用するかの 2 つの可能性があります。

1 つのクエリ戦略に従って、データを取得し、時間順に並べ替えるだけです。追加の行で、SQL 関数 UNIX_TIMESTAMP() を使用して日付を表すタイムスタンプを取得します

このタイムスタンプがあれば、php.ini を使用して結果セットを 3 つの結果セットに分割できます。

もう 1 つの方法は、日付ごとにクエリを生成することです。これを行うには、php 関数 mktime を使用して $a = (0:00 15.04) の時間を取得できます。および $b=(23:59 15.04)。mysql クエリの where 条件では、 between ステートメントを追加するだけです。選択した日付は $a と $b でなければなりません

where tbl.`date` between FROM_UNIXTIME( ' . $a . ') AND FROM_UNIXTIME( ' . $b . ');';
于 2011-04-17T11:40:03.860 に答える
0
for ($i = 15; $i <= $current_day_of_month; $i++) {
        // SELECT * FROM clicks_log WHERE DATE LIKE '% $i.04.2011' ORDER BY DATE ASC;
        // print the result
}

通常は、日付を Unix タイムスタンプとして保存することをお勧めします。これにより、 を使用してより簡単にきめ細かな制御が可能になりますSELECT

于 2011-04-17T11:41:24.130 に答える
0

日付の昇順で並べ替えられたデータを選択する必要があります。

 $sql = "SELECT ip, date FROM clicks_log table ORDER BY date ASC";

次に、PHP でデータを処理して、出力のために日数に分割します。

 $date = date_parse($row['date']);
 $year = $row['year'];
 $month = $row['month'];
 $day = $row['day'];
于 2011-04-17T11:43:15.533 に答える