2

我有一个有趣的图像数据库,但这个问题与发布日期的所有内容有关。如果我要更新一个页面,我首先检查是否设置了今天的条目,如果没有,我会选择一个在数据库中最长的条目,如下所示:

$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]");
}

基本上这样做是“获取今天的图像并在今天没有图像时选择最长的待处理图像”。是否可以在单个查询中执行此操作,如何完成?

4

3 回答 3

2

如果您将 NULL 合并为一个值,而它不更新源数据(您可能仍然希望这样做),您可以更改选择以恢复具有今天日期或没有日期的那些:

SELECT * 
FROM amazingjokes.img 
WHERE COALESCE( listed, CURDATE() ) = CURDATE()
于 2013-07-02T08:59:07.860 回答
2

你可以尝试这样的事情:

update amazingjokes.img 
    set listed=curdate() 
where 
    id IN (
        select 
            id 
        from 
            amazingjokes.img 
        where 
            isnull(listed) 
        order by 
            added asc
    )

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

 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
于 2013-07-02T08:56:51.053 回答
1

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

$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列出”确保如果今天选择了一张图片,它将在顶部,如果今天没有图片,订单中的“添加的ASC”将确保最长的待定图片在列表顶部。感谢@Stephan 让我朝着正确的方向前进!

于 2013-07-02T10:08:10.183 回答