首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL中的条件集

MySQL中的条件集
EN

Stack Overflow用户
提问于 2013-07-02 16:53:23
回答 3查看 252关注 0票数 2

我有一个搞笑图片的数据库,但这个问题涉及到所有有发布日期的东西。如果我正在更新一个页面,我首先检查是否为今天设置了一个条目,如果没有,我会选择一个在数据库中存在时间最长的条目,如下所示:

代码语言:javascript
复制
$result=mysql_query("SELECT * FROM amazingjokes.img WHERE listed=CURDATE()");
if(!mysql_num_rows($result)){
   $result=mysql_query("SELECT * FROM amazingjokes.img WHERE isnull(listed) 
                        ORDER BY  added ASC");
   $row=mysql_fetch_array($result);
   $mysql_query("UPDATE amazingjokes.img SET listed=CURDATE() 
                 WHERE id=$row[id]");
}

基本上,它的作用是“获取今天的图像,并在没有今天的图像时选择时间最长的待处理图像”。是否可以在单个查询中做到这一点?如何做到这一点?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-07-02 18:08:10

我最终得到的解决方案是一个查询,如果没有为今天的图像设置日期,则使用第二个查询:

代码语言:javascript
复制
$img=mysql_fetch_array(mysql_query("
  SELECT * FROM amazingjokes.img
  WHERE listed=curdate() OR isnull(listed) 
  ORDER BY listed DESC, added ASC LIMIT 1"
));
if($img[0]["listed"]==null) 
  mysql_query("UPDATE amazingjokes.img SET listed=curdate() 
               WHERE id=".$img[0]["id"]);

这将选择没有日期或具有今天日期的所有内容。"order BY list“确保如果选择了今天的镜像,它将在列表的顶部,如果没有今天的镜像,则顺序中的”添加的ASC“将确保等待时间最长的镜像位于列表的顶部。感谢@Stephan把我带到了正确的方向!

票数 1
EN

Stack Overflow用户

发布于 2013-07-02 16:56:51

您可以尝试如下所示:

代码语言:javascript
复制
update amazingjokes.img 
    set listed=curdate() 
where 
    id IN (
        select 
            id 
        from 
            amazingjokes.img 
        where 
            isnull(listed) 
        order by 
            added asc
    )

要替换孔3查询,您可以尝试:

代码语言:javascript
复制
 update amazingjokes.img  
    set listed=curdate()
 where 
    id IN (
        select 
            id 
        from 
            amazingjokes.img 
        where 
            listed=curdate() 
        order by 
            added asc
    )
    AND (
        select 
            count(*) 
        from 
            amazingjokes.img 
        where 
            listed=curdate()
    ) = 0
票数 2
EN

Stack Overflow用户

发布于 2013-07-02 16:59:08

如果您将NULL合并为一个值,而不更新源数据(您可能仍然希望这样做),则可以使用以下命令更改select,以返回具有今天日期或没有日期的数据:

代码语言:javascript
复制
SELECT * 
FROM amazingjokes.img 
WHERE COALESCE( listed, CURDATE() ) = CURDATE()
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17421305

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档