MySQL在第一次出现后忽略空结果
我在MySQL数据库中有一个表MySQL在第一次出现后忽略空结果,mysql,sql,Mysql,Sql,我在MySQL数据库中有一个表lastviewed CREATE TABLE `lastviewed` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `record_id` int(11), `product_id` int(11) NOT NULL DEFAULT '0', `user_id` int(11) NOT NULL, `lastviewed` datetime NOT NULL, PRIMARY KEY (`id`)
lastviewed
CREATE TABLE `lastviewed` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`record_id` int(11),
`product_id` int(11) NOT NULL DEFAULT '0',
`user_id` int(11) NOT NULL,
`lastviewed` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
我需要通过当前[登录]用户id
筛选此表的lastviewed DESC LIMIT 4获取最后4行订单,这不是什么大问题,但我遇到了一些新的需求
我有下列案例
如果产品
已经有另一行(在上次查看的前4个条目中,因为只有前4个条目显示)带有记录(即记录id
列有值),则不要显示NULL
记录
行
仅当产品
在上次查看的前4行之一中没有另一行具有值记录id
时,才显示空
行,因为仅显示前4行
如果同一产品有两行、三行或四行,且所有行的记录id不同,则显示所有行
目前我有这个查询
SELECT * FROM `lastviewed` WHERE `user_id` = xxx
ORDER BY `lastviewed` DESC LIMIT 4
我知道我们需要一些子查询和IF/ELSE CASE/THEN条件,但我没有提示如何实现它
样本数据
id record_id product_id user_id lastviewed
261766 145304 95650 266 2014-03-14 03:34:16
261594 NULL 95650 266 2014-03-14 02:47:38
261765 145303 91312 266 2014-03-14 01:57:26
261444 NULL 91312 266 2014-03-14 01:44:33
261778 145314 91312 266 2014-03-10 23:02:39
261777 NULL 91312 266 2014-03-10 23:02:13
261776 145313 91312 266 2014-03-10 23:00:26
261775 NULL 91312 266 2014-03-10 22:59:13
261774 NULL 93185 266 2014-03-10 22:57:16
261773 NULL 93185 266 2014-03-10 22:53:47
以及要求的结果
261766 145304 95650 266 2014-03-14 03:34:16
261765 145303 91312 266 2014-03-14 01:57:26
261778 145314 91312 266 2014-03-10 23:02:39
261776 145313 91312 266 2014-03-10 23:00:26
261774 NULL 93185 266 2014-03-10 22:57:16
使用限制4
261766 145304 95650 266 2014-03-14 03:34:16
261765 145303 91312 266 2014-03-14 01:57:26
261778 145314 91312 266 2014-03-10 23:02:39
261776 145313 91312 266 2014-03-10 23:00:26
小提琴:我希望它能帮助并满足您的期望
SELECT * FROM
(SELECT * FROM `lastviewed` WHERE `user_id` = 266 AND record_id IS NOT NULL
UNION
SELECT * FROM `lastviewed` WHERE product_id NOT IN
(SELECT product_id FROM `lastviewed` WHERE record_id IS NOT NULL GROUP BY product_id)
) AS q1
GROUP BY product_id, record_id
ORDER BY `lastviewed` DESC
LIMIT 4;
您的所有列不是空的,就是有一个默认值-怎么可能有空的?此外,您可以有空列,但不能有空行…record\u id
可以为空,我在特定的情况下添加了空。在这种情况下,查看一些示例数据以及您期望的结果会有帮助。@NevilleK为了避免混淆,我已从record\u id
中删除了默认值。。请稍等……是的,非常感谢,我认为仅查询数据库是不可能的,我想通过应用一些编程技巧来实现这一点,但看到您的查询后,我改变了主意,再次感谢。