【发布时间】:2022-12-10 18:20:09
【问题描述】:
我正处于设置一些功能以使用 PHP/MySQL 控制某些图像板组件的分页的早期阶段。
我最初需要做的是仅在查询的 boards 表部分设置 LIMIT 和 OFFSET 子句。这样我就可以按显示的板分页。
当输出此数据时,板上出现的图像(每个板 4 个预览图像)由 while 循环内的计数器控制,因此重要的是不要对这些图像应用 LIMIT 或 OFFSET。
数据是通过一个查询获取的,以防止对数据库进行嵌套的 MySQL 调用,这将是一个性能问题。
下面的 MySQL 中有 3 个表在起作用 - boards 表、images 表和 boards_images 表,它是一个具有多对多关系的数据透视表/链接表,用于存储图像分配给董事会。
问题
在下面的函数中,我将如何设置它以便 LIMIT 和 OFFSET 子句仅适用于 boards 表。如果我需要对数据进行分组,或者执行子查询,我无法确定,这两者我以前都没有做过,或者解决方案是否不是这两种方法?
function boardsOutput($limit=0, $offset=0) {
$s = "SELECT boards.board_name, boards.board_id, boards.user_id, images.filename, images.image_title
FROM boards
LEFT JOIN boards_images ON boards_images.board_id = boards.board_id
LEFT JOIN images ON boards_images.image_id = images.image_id
WHERE boards.user_id = :user_id
ORDER BY boards.board_id DESC";
// append the LIMIT and OFFSET values onto the query
if($limit > 0) {
$s.= " LIMIT " . $limit;
}
if($offset > 0) {
$s.= " OFFSET " . $offset;
}
return $s;
}
// Provide values for the $limit and $offset arguments
$queryString = boardsOutput($limit, $offset);
// then add the $queryString variable to a PHP PDO prepare() method etc
输出板预览的屏幕截图。我想限制每页的数量
非常感谢任何帮助。
【问题讨论】:
-
如果您对版块进行分页,您似乎只想从连接表中选择与版块匹配的图像。为什么要从其他表中选择所有内容?您是否查看了通过上述查询实际收到的数据?
-
@MarkusAO 还显示了用户的空板。他们可以创建一个空板,然后从图像库中向该板添加图像。用户将被限制在尚未确定数量的板上,这样事情就不会失控。
-
如果你说你想使所有图像可用(在图像库中)到任何板,那么您应该只进行一个单独的查询来为您的图像库获取数据。
JOIN会将连接表中的列合并为行,并且您应用的任何LIMIT都将应用于所有这些(复合)行。您可以想象制作一个RIGHT JOIN并应用一个WHERE过滤器来限制选择的板。也许不是。仅进行单独的简单查询以获取图像更容易且更便宜。 -
@MarkusAO 我不是这么说的。这些图像已经分配给
boards_images表中的板(通过单独的过程),这是一个链接/透视多对多表。这方面都得到了照顾。这些是登录用户的看板预览,其中包含 4 张图像和特定的相关看板。如果您单击预览,它会将您带到完整的电路板,以便您可以查看该电路板的所有图像。 -
然后我不清楚为什么你不想限制全部,如果你只想选择与正在显示的板相关的图像。