我有一个搞笑图片的数据库,但这个问题涉及到所有有发布日期的东西。如果我正在更新一个页面,我首先检查是否为今天设置了一个条目,如果没有,我会选择一个在数据库中存在时间最长的条目,如下所示:
$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]");
}基本上,它的作用是“获取今天的图像,并在没有今天的图像时选择时间最长的待处理图像”。是否可以在单个查询中做到这一点?如何做到这一点?
发布于 2013-07-02 18:08:10
我最终得到的解决方案是一个查询,如果没有为今天的图像设置日期,则使用第二个查询:
$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把我带到了正确的方向!
发布于 2013-07-02 16:56:51
您可以尝试如下所示:
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-02 16:59:08
如果您将NULL合并为一个值,而不更新源数据(您可能仍然希望这样做),则可以使用以下命令更改select,以返回具有今天日期或没有日期的数据:
SELECT *
FROM amazingjokes.img
WHERE COALESCE( listed, CURDATE() ) = CURDATE()https://stackoverflow.com/questions/17421305
复制相似问题