gpt4 book ai didi

php - 用于整理图库中下一张/上一张图片的SQL

转载 作者:行者123 更新时间:2023-11-29 03:08:38 26 4
gpt4 key购买 nike

我正在处理我网站的照片部分,但更准确地说是处理带有排序选项的下一个/上一个链接。

存在两个不同的排序选项,第一个是过滤器(最新、趋势、收藏、用户等),第二个是针对之前的一些过滤器(日期、 View 、评级等)的排序选项

我无法找到一个好的解决方案来轻松检索幻灯片放映的下一张/上一张图片。

这是我为 filter:latest

获取下一张图片所用的一点 SQL
if ($filter == "latest") {
$sql = "SELECT *
FROM photos
WHERE status = 0 AND id < ".$id."
ORDER BY id DESC
LIMIT 1
";
$result = $db->sql_query($sql);
$sql2 ="SELECT *
FROM photos
WHERE id = (SELECT MAX(id) FROM photos WHERE status = '0')
ORDER BY id DESC
LIMIT 1
";
}

我想知道在我的项目中是否有更简单的方法来实现它?也许存在一个 php 类来做这样的事情?

如果我必须这样做,我觉得我将花费很长时间才能让所有这些 SQL 查询正常工作。

编辑

这是我的 photos 表格的布局

`id`              -> unique ID, autoincremented
`title`
`img_name` -> contains the image file name
`date_created` -> when the picture was uploaded
`uploader` -> id of the user that uploaded
`views` -> number of views the picture has
`up_votes` -> votes used to calculate the Wilson score interval
`down_votes`
`net_votes` -> up vote minus down votes

还有其他类似的表将用户与他们拥有的 friend 联系起来,称为 users_friends

`user_id`        -> contains id of the user that added the friend 
`friend_user_id` -> contains id of the friend in question

通过这两个表,我可以使用此 sql 查询获取用户 friend 发布的所有图片:

SELECT * 
FROM photos
WHERE uploader IN
(
SELECT friend_user_id
FROM users_friends
WHERE user_id = ':user_id'
)
ORDER BY id DESC

然后我有两个查询来获取下一张图片的链接,还有两个其他查询来获取上一张图片。我有两个,因为一个用于当您到达数据库的末尾返回另一端时,另一个用于所有其他查询。它们看起来像这样(我只在这里发布下一个按钮)

$sql = "SELECT   *
FROM photos
WHERE status = 0 AND id < ".$id." AND Uploader IN (SELECT friend_user_id FROM users_friends WHERE user_id = ".$logedInUser['User_ID'].")
ORDER BY id DESC
LIMIT 1
";
$sql2 ="SELECT *
FROM photos
WHERE id = (SELECT MAX(id) FROM photos WHERE status = '0' AND Uploader IN (SELECT friend_user_id FROM users_friends WHERE user_id = ".$logedInUser['User_ID']."))
ORDER BY id DESC
LIMIT 1
";
$result = $db->sql_query($sql);

if (mysql_num_rows($result)==1) {
$row = $db->sql_fetchrow($result);
return "/photo/".$row["id"]."/".urlFriendly($row["Title"])."/".$filter.$sort;
}
else
{
$result = $db->sql_query($sql2);
$row = $db->sql_fetchrow($result);
return "/photo/".$row["id"]."/".urlFriendly($row["Title"])."/".$filter.sort;
}

我觉得有很多东西可以简化,但我还不知道怎么做。

我还有 Wilson 分数的下限 sql 代码要为下一个/上一个按钮实现,而且必须编写 4 次的 sql 代码相当多。也许我可以在 photos 表中插入 Wilson 分数,这可以大大简化 sql 代码。

最佳答案

如果您可以发布您的表格结构 - 即您有哪些列/类型以及每行代表什么,将会很有帮助。我假设您有一个表,其中每一行代表一张照片,并且每张照片都有一个 ID、文件名和其他各种可帮助您过滤/排序的列(例如日期、收藏夹等)。

如果您的过滤和排序首选项是由用户定义的,那么您可以在单个 SQL 查询中使用它们,从而获得完整的有序结果集。例如:

$sort = date;
$filter = favorite;

$sql = "SELECT ID, filename, [other vars here]
FROM photos
WHERE " . $filter . " = TRUE
ORDER BY ". $sort . " DESC";
$result = $db->sql_query($sql);

现在,您可以使用诸如 mysql_fetch_array 之类的函数遍历结果集中的每一行,并使用当前、上一张和下一张照片填充某种数据结构。

关于php - 用于整理图库中下一张/上一张图片的SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11619748/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com