繁体   English   中英

MySQL将查询合并为一个

[英]MySQL Combining queries into one

让我解释一下我要做什么。 首先,这是到目前为止我的结果预览:

在此处输入图片说明

我的查询:

SELECT slides.name as slide, filename, time, sort_id 
FROM `slide_sort` 
INNER JOIN slides 
    ON slide_sort.slide_id = slides.id 
WHERE slide_sort.user_id = 1

因此,每个幻灯片都是已经创建的页面,但是每个用户都可以指定在该页面上停留多长时间以及下一个“幻灯片”将是什么。

所以HTML看起来像这样:(dashboard.php)

<meta http-equiv="refresh" content="40;url=did-you-know.php">

现在,它已经被硬编码,但是我希望能够从数据库中提取它。


因此,在dashboard.php文件中,我可以在顶部输入以下内容: $currentSlide = "Dashboard"; 这样,我就可以向查询中添加AND slide = $currentSlide ,这样我可以看到该幻灯片的时间为40秒,因此可以将其粘贴到content="$time" 但是我的问题是,我该如何添加另一个查询以获取NEXT sort_id,以便sort_id + 1并获取该文件名,因此我将获得以下信息:

幻灯片-时间-next_filename

资讯主页-40-did-you-know.php


但是我还需要查看它是否是最后一个sort_id,如果是,那么下一张幻灯片需要从#1开始。

这有意义吗?

如果有人能帮助我朝正确的方向前进,我将非常感激。

谢谢!

您可以使用以下内容检索NEXT排序ID:

SELECT slides.name as slide, filename, time, sort_id  
FROM `slide_sort` 
INNER JOIN slides 
ON slide_sort.slide_id = slides.id 
WHERE slide_sort.user_id = 1 and slide_sort.sort_id = ($sort_id + 1)

您可以使用以下内容检索LAST排序ID:

SELECT sort_id 
FROM `slide_sort` 
INNER JOIN slides 
ON slide_sort.slide_id = slides.id 
WHERE slide_sort.user_id = 1 order by sort_id desc limit 1

您可以检查这是否是最后一张带有以下内容的幻灯片:

if ($sort_id == $last_sort_id)

如果是,则可以检索第一个排序ID记录:

SELECT slides.name as slide, filename, time, sort_id  
FROM `slide_sort` 
INNER JOIN slides 
ON slide_sort.slide_id = slides.id 
WHERE slide_sort.user_id = 1 order by sort_id ASC limit 1

您可以将查询结果限制为仅2行,包括当前幻灯片。 这样,您将获得幻灯片重定向到的位置,以及下一张幻灯片。 当然,由于需要处理多行,因此您仍然需要迭代或使用固定索引。 并且您需要检查您是否实际上得到了两行,以查看实际上是否还有下一张幻灯片可用。

就是说,我建议您使用当前查询来检索完整的幻灯片,并对其进行迭代以找到所需的内容。 因为...

  1. 这是一个简单的查询,而mysql喜欢简单的查询。 派生表和子查询类似于减慢查询速度,而您不希望这样做。 即使看起来像过早的优化。
  2. 数据集不太可能很大,并且O(N)算法很便宜
  3. 它的好处是您可以在整个幻灯片集中显示导航

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM