0

私はarticlesテーブルとcategoriesこのようなテーブルを持っています:

 articles
-----------------------------------------------
| id | datetime | title | categoryid | status |
-----------------------------------------------

 categories
-------------
| id | name |
-------------

次のように、選択した各カテゴリから最新の記事の日付を取得する必要があります。

 result
----------------------------------------------------------
| category id | category name | most recent article date | 
----------------------------------------------------------

結果には、各カテゴリのすべてのカテゴリ + 最新の記事 (ステータス = 0) の日付が含まれている必要があります。

その結果は、カテゴリの最新の記事をselect * from categories示す新しい行を追加したものとまったく同じでなければなりませんが、記事のステータスが 0 の場合のみです。datetime

それは明らかですか?

これが必要な理由は、動的なサイトマップを作成しようとしていて、各カテゴリの最新記事の時間が<lastmod>カテゴリ リストのタグに表示される必要があるためです。

$sql = mysql_query(".....?......");

while ($string = mysql_fetch_array($sql)){?>
    <url>
        <loc>http://www.url.com/<?echo $string['id'];?>/<?echo generate_seo_link($string['name']);?>/</loc>
        <priority>0.5</priority>
        <changefreq>daily</changefreq>
        <lastmod><? echo date("d/m/Y H:i:s", strtotime($string['date'])); ?></lastmod>
    </url>
<?} 
4

1 に答える 1

3

UPDATE2収容するstatus

SELECT c.id, c.name, MAX(a.datetime) most_recent
  FROM articles a RIGHT JOIN
       categories c ON a.categoryid = c.id
 WHERE a.status IS NULL OR a.status = 0
 GROUP BY c.id, c.name

出力

| ID |      NAME |  RECENT_DT |
-------------------------------
|  1 | Category1 | 2013-03-19 |
|  2 | Category2 | 2013-03-17 |
|  3 | Category3 |     (null) |

これがSQLFiddleです

そしてサイドノートに

新しいコードにmysql_*関数を使用しないでください。それらは 非推奨ですPDO またはMySQLiのいずれかでプリペアドステートメントを使用 します。これが優れたPDOチュートリアルです。

于 2013-03-21T01:42:27.707 に答える