MySQL查询有助于获取组合两个表的数据

时间:2011-10-12 14:48:05

标签: php mysql sql

我有以下表格

articles_category

id    title    sef_title

articles_data

id    cat_id    title    sef_title    details

在每个表上,“id”是主键,articles_data.cat_id是articles_category的外键

我需要使用以下数据为每个文章类别获取一篇最新文章数据。

articles_category.id
articles_category.title
articles_category.sef_title
articles_data.id
articles_data.cat_id
articles_data.title
articles_data.sef_title
articles_data.details

我尝试了以下查询,但它显示的是第一篇文章(最早的条目),而不是最新文章。

SELECT
    articles_category.id as article_cat_id, articles_category.sef_title as cat_sef_title, articles_category.title as cat_title,
    articles_data.id, articles_data.cat_id as listing_cat_id, articles_data.title, articles_data.sef_title, articles_data.details
FROM articles_category, articles_data
WHERE articles_category.id = articles_data.cat_id
GROUP BY articles_data.cat_id
ORDER BY articles_data.id DESC

3 个答案:

答案 0 :(得分:1)

如果是一对多关系,请尝试(未经测试):

SELECT * 
FROM articles_category, articles_data 
WHERE articles_category.id = articles_data.cat_id 
  AND articles_data.id in (
     SELECT max(articles_data.id) 
     FROM articles_data GROUP BY cat_id
  )

不保证GROUP BY

上的特定行

并且您应该在文章上使用日期,因为即使您使用自动增量,最大ID也永远不会保证是最新文章

答案 1 :(得分:0)

ORDER会影响执行GROUP功能后的记录显示。 GROUP函数识别它在搜索中看到的第一条记录。

您需要做的是执行2次查询。第一个应该是

SELECT max(articles_data.id), articles_data.cat_id ... 
GROUP BY articles_data.cat_id

第二个查询应该使用那些结果主键来获取相关记录。

答案 2 :(得分:-1)

可能是创建另一个值,例如date_created,并在创建条目时在其中放置时间戳。

然后你只需要ORDER BY约会。