Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL查询帮助结合两个表获取数据_Php_Mysql_Sql - Fatal编程技术网

Php MySQL查询帮助结合两个表获取数据

Php MySQL查询帮助结合两个表获取数据,php,mysql,sql,Php,Mysql,Sql,我有以下几张表 物品类别 文章和数据 在每个表上,id是主键,articles\u数据。cat\u id是articles\u类别的外键 我需要为每个文章类别获取一个最新的文章数据,其中包含以下数据 articles_category.id articles_category.title articles_category.sef_title articles_data.id articles_data.cat_id articles_data.title articles_data.sef_t

我有以下几张表

物品类别

文章和数据

在每个表上,id是主键,articles\u数据。cat\u id是articles\u类别的外键

我需要为每个文章类别获取一个最新的文章数据,其中包含以下数据

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

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

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

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

第二个查询应该使用这些结果主键获取关联的记录。

一种可能性是创建另一个值,例如date\u created,并在创建条目时在其中放置时间戳


然后您只需按日期订购。

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

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
  )
您不能保证在组中有特定的行


你真的应该在文章中使用日期,因为max id永远不能保证是最新的文章,即使你使用的是autoincrement

@lvan表中没有任何日期字段,我需要排序的是每个类别的最后一篇文章你应该使用日期,永远不要相信ID。你不知道SQL引擎在幕后做什么:升序排序在列表顶部显示最低的数字。你的答案不会改变他的输出。id在两个表上都是自动递增的。我尝试了ORDER BY articles_data.id ASC和ORDER BY articles_data.id DESC,但都不起作用。解决方案只是创建一个时间戳。知道什么时候创建了东西总是很好的。这个查询似乎工作得很好。我不确定你想说的关于max-id的内容永远不能保证是最新的文章,即使你使用的是autoincrement。你能提供更多关于这方面的信息吗?一个人总是可以在一个id处插入一篇文章,该id在某个时候被删除,这不是latestin理论……是的。但是,对于所讨论的应用程序而言,速度可能太慢。
SELECT max(articles_data.id), articles_data.cat_id ... 
GROUP BY articles_data.cat_id
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
  )