2

私のデータベース テーブルには、「id」、「date_visited」、「page_title」、「ip」、「total_views」の 5 つの列があります。ORDER BY 'date_visited' を表示できません。私のPHPクエリは次のとおりです。

<?php
[...]
$query = "SELECT *,count(*) FROM table WHERE ip GROUP BY page_title";
$result = mysqli_query($link,$query) or die(mysqli_error($link). "Q=".$query);
if(!$result == 0) {
    while ($row = mysqli_fetch_array($result)) {
        $dataList_br .= '<tr>
                            <td>' .$row['date_visited']. '</td>
                            <td>' .$row['page_title']. '</td>
                            <td>' .$row['count(*)']. '</td>
                        </tr>';
    }
} else {
    $dataList_br .= '<p class="warning">No data found in database.</p>';
}
?>

出力すると、[日付][ページタイトル]と[総閲覧数]が表示されます。誰か助けてください。クエリの最後の日付を表示するにはどうすればよいですか。代わりに、ページにアクセスした最初の日が表示されるようになりました。

ありがとうございました。

4

3 に答える 3

2

MySQL は の内容に寛容であり、GROUP BY列が に含まれてGROUP BY いなくてもSELECTed である場合、多少恣意的にグループの行を返します。あなたの場合、各グループの最初の行 (最も低い日付) が表示されました。

グループごとに行の page_name を取得し、それをMAX(date_visited)メイン テーブルに対して結合して、メイン テーブルから残りの列を取得します。

SELECT
  table.id,
  table.ip,
  table.total_views,
  maxdates.date_visited,
  maxdates.page_name,
  maxdates.thecount
FROM
  table
  JOIN (
    /* Subquery returns the aggregates to join against 
       the main table so other columns can be pulled in */
    SELECT 
      page_title, 
      MAX(date_visited) AS maxdate, 
      COUNT(*) AS thecount 
    FROM table 
    GROUP BY page_title
  ) maxdates
    ON table.page_name = maxdates.page_name 
       AND table.date_visited = maxdates.maxdate
于 2012-07-18T23:35:11.120 に答える
0

を使用しますORDER BY。そのようです:

$query = "SELECT *, count(*) 
            FROM table 
           WHERE ip 
        GROUP BY page_title 
        ORDER BY date_visited ASC";
于 2012-07-18T23:33:10.440 に答える
0

この「ORDER BY」を試してください:

$query = "SELECT date_visited, page_title,count(*) FROM table WHERE ip ORDER BY page_title ASC";
$result = mysqli_query($link,$query) or die(mysqli_error($link). "Q=".$query);
if(!$result == 0) {
    while ($row = mysqli_fetch_array($result)) {
        $dataList_br .= '<tr>
                            <td>' .$row['date_visited']. '</td>
                            <td>' .$row['page_title']. '</td>
                            <td>' .$row['count(*)']. '</td>
                        </tr>';
    }
} else {
    $dataList_br .= '<p class="warning">No data found in database.</p>';
}
于 2012-07-18T23:37:21.947 に答える