0

我有一张articles桌子和一张categories这样的桌子:

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

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

我需要从选择中的每个类别中获取最新文章的日期,例如:

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

结果必须包含所有类别 + 每个类别的最新文章(状态 = 0)日期。

它的结果必须与select * from categoriesPLUS 一个新行显示该datetime类别的最新文章的结果完全相同,但仅当文章状态为 0时。

明白了吗?

我需要它的原因是因为我正在尝试制作动态站点地图,并且我需要每个类别的最新文章的时间才能显示在<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_* 函数用于新代码。它们已被 弃用。对PDOMySQLi使用 准备好的语句。这是一个很好的PDO 教程

于 2013-03-21T01:42:27.707 回答