Php 用于在图库中整理下一张/上一张图片的SQL

Php 用于在图库中整理下一张/上一张图片的SQL,php,mysql,sql,Php,Mysql,Sql,我正在处理我网站的照片部分,但更准确地说,是关于下一个/上一个带有排序选项的链接 有两种不同的排序选项,第一种是筛选最新、趋势、收藏夹、用户等,第二种是筛选一些以前筛选的日期、视图、评级等 我很难找到一个好的解决方案来轻松检索幻灯片放映的下一张/上一张图片 这是我用来获取下一个过滤器图片的一点SQL:最新 还有其他一些表,比如一个链接用户和他们的朋友的表,叫做users\u friends 有了这两个表,我可以使用此sql查询获取用户朋友发布的所有图片: SELECT * FROM photo

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

有两种不同的排序选项,第一种是筛选最新、趋势、收藏夹、用户等,第二种是筛选一些以前筛选的日期、视图、评级等

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

这是我用来获取下一个过滤器图片的一点SQL:最新

还有其他一些表,比如一个链接用户和他们的朋友的表,叫做users\u friends

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

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 score sql代码的下限,要为下一个/上一个按钮实现,这是一个相当多的sql代码,需要编写4次。也许我可以在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之类的函数逐步遍历结果集中的每一行,并用当前、上一张和下一张照片填充某种数据结构。

我几乎没有开发网站的经验,所以我不能确定,但根据其他网站上分页的实现方式,也许您可以使用跳到所需的照片:选择*从。。。哪里订购人。。。限制1偏移量n,其中第一张照片的n为0,第二张照片的n为1,等等,最后一张照片的计数为*-1。也就是说,在提供最后一张照片的偏移量之前,您首先需要计算COUNT*。我知道这是离题的,但正如您所知,如果这是您的生产代码,您可能有SQL注入…@AndriyM我尝试了您的解决方案,但不起作用,但我明天将再次尝试。@Exander是的,我知道这是一种可能性,但现在我只是一步一步地开发我的网站,一旦它几乎完成,我将浏览所有的网站并完成一些小事情,比如SQL注入。
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;
}
$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);