Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.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
MySQL在第一次出现后忽略空结果_Mysql_Sql - Fatal编程技术网

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`)

我在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`)
) 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
    中删除了默认值。。请稍等……是的,非常感谢,我认为仅查询数据库是不可能的,我想通过应用一些编程技巧来实现这一点,但看到您的查询后,我改变了主意,再次感谢。