Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/241.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,PDO“排名”_Php_Mysql_Select_Pdo_Distinct - Fatal编程技术网

Php Mysql,PDO“排名”

Php Mysql,PDO“排名”,php,mysql,select,pdo,distinct,Php,Mysql,Select,Pdo,Distinct,我在试图弄清楚如何完成以下任务时遇到了一些困难 我的桌子: id: schema: updated_date 1 sometext 2012-01-01 1 sometext 2012-02-02 1 sometext 2011-03-03 1 sometext 2010-04-04 2 sometext 2012-04-05 2 sometext 2012-06-07 2 sometext 2011-04-01 2 somet

我在试图弄清楚如何完成以下任务时遇到了一些困难

我的桌子:

id:  schema:  updated_date

1    sometext  2012-01-01
1    sometext  2012-02-02
1    sometext  2011-03-03
1    sometext  2010-04-04
2    sometext  2012-04-05
2    sometext  2012-06-07
2    sometext  2011-04-01
2    sometext  2010-09-09
现在,我想要完成的是从表中选择所有内容,并根据ID获取所有不同的记录,这应该给我两行,棘手的部分是根据更新的日期获取结果,我想要最新的一行。因此,根据上表,我希望能够提取以下2条记录:

1    sometext  2012-02-02
2    sometext  2012-06-07
谁能帮我做这个我用的是MySQL,我用的是PHPPDO

表格结构:

CREATE TABLE IF NOT EXISTS `mail_schema` (
  `id` int(11) NOT NULL,
  `name` varchar(50) NOT NULL,
  `message` text NOT NULL,
  `updated_by` int(11) NOT NULL,
  `last_updated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=MyISAM  DEFAULT CHARSET=latin1;
表格数据:

INSERT INTO `mail_schema` (`id`, `name`, `message`, `updated_by`, `last_updated`) VALUES
(1, 'nummer et', '<p>\n med tekst</p>\n', 3, '2012-06-25 18:56:21'),
(1, 'nummer 2', '<p>\n  med tekst</p>\n', 3, '2012-06-25 18:56:46'),
(1, 'test', '<p>\n  test</p>\n', 3, '2012-06-25 18:57:38'),
(1, 'test igen', '<p>\n asd</p>\n', 3, '2012-06-25 18:58:28'),
(2, 'test 5', '<p>\n    asd</p>\n', 3, '2012-06-25 18:59:11'),
(3, 'test 6', '<p>\n    med id 3</p>\n', 3, '2012-06-25 18:59:37'),
(2, 'test 5', '<p>\n    asd version 2</p>\n', 3, '2012-06-25 19:00:46');
您需要在SQL查询中使用GROUPBY子句

我相信这样的质疑应该会奏效:

SELECT * FROM `table` GROUP BY `id`, `updated_date` DESC ORDER BY `id` ASC
                                                    ^
                                                    Might need to be ASC


这不起作用?

在四处搜索后,我找到了以下解决方案:

SELECT * FROM (SELECT * FROM mail_schema ORDER BY last_updated DESC) AS x GROUP BY id

虽然它看起来有点难看,但它让我走得更远。

不确定这是怎么回事,但它似乎不起作用,这是我从代码sry中获取的有关日期字段的错误信息的sql:$stmt=$this->dbh->prepareSELECT id,name,message,updated\u by,last\u updated from mail\u schema GROUP by id,last\u updated from mail\u ORDER by id,last\u updated ASC by id ASC;这将提供表中的所有记录?请尝试添加:选择不同的id,*在开始处,而不是选择*$stmt=$This->dbh->prepareSELECT不同的id,*从邮件模式组按id,最后更新的描述顺序按id ASC;给出一个空的结果select DISTINCT id,*FROM mail_schema ORDER BY last_updated DESC1064-您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,了解在第1行使用“*FROM mail_schema ORDER BY last_updated DESC LIMIT 0,30”附近的正确语法。这似乎可行,尽管我使用每个id获得的是最旧的帖子,而不是最新的帖子。我已经尝试使用ASC而不是DESC,但没有任何运气。@Mathias它返回了正确的结果,id 2只显示在第一位。我通过此查询获得3条记录。我在表中有7行,但是只有3个唯一的ID,所以这很好,但是它选择了3行中最旧的,而不是最新的。
SELECT * FROM `table` GROUP BY `id` ORDER BY updated_date DESC;
SELECT * FROM (SELECT * FROM mail_schema ORDER BY last_updated DESC) AS x GROUP BY id