当前位置: 首页 > 面试题库 >

选择一行及其周围的行

华安民
2023-03-14
问题内容

好吧,假设我有一张桌子,上面有照片。

我要做的是在页面上根据URI中的ID显示照片。下面的照片我想在附近的照片中显示10张缩略图,而当前照片应该在缩略图的中间。

到目前为止,这是我的查询(这只是一个示例,我使用7作为id):

SELECT
    A.*
FROM
  (SELECT
       *
   FROM media
   WHERE id < 7
   ORDER BY id DESC
   LIMIT 0, 4
   UNION
   SELECT
       *
   FROM media
   WHERE id >= 7
   ORDER BY id ASC
   LIMIT 0, 6
  ) as A
ORDER BY A.id

但是我得到这个错误:

#1221 - Incorrect usage of UNION and ORDER BY

问题答案:

只能ORDER BYUNION‘d查询定义一个子句。使用UNION或都没关系UNION ALL。MySQL确实支持’d查询的LIMIT某些部分的子句UNION,但是如果没有定义顺序的能力,它就相对没有用。

MySQL还缺少排名功能,您需要使用排名功能来处理数据中的空白(由于条目被删除而丢失)。唯一的选择是在SELECT语句中使用一个递增变量:

SELECT t.id, 
       @rownum := @rownum+1 as rownum 
  FROM MEDIA t, (SELECT @rownum := 0) r

现在我们可以获得行的连续编号列表,因此我们可以使用:

WHERE rownum BETWEEN @midpoint - ROUND(@midpoint/2) 
                 AND @midpoint - ROUND(@midpoint/2) +@upperlimit

将7用作@midpoint的值,则@midpoint - ROUND(@midpoint/2)返回的值4。要总共获得10行,请将@upperlimit值设置为10。这是完整的查询:

SELECT x.* 
  FROM (SELECT t.id, 
               @rownum := @rownum+1 as rownum 
          FROM MEDIA t, 
               (SELECT @rownum := 0) r) x
 WHERE x.rownum BETWEEN @midpoint - ROUND(@midpoint/2) AND @midpoint - ROUND(@midpoint/2) + @upperlimit

但是,如果您仍然想使用LIMIT,则可以使用:

  SELECT x.* 
    FROM (SELECT t.id, 
                 @rownum := @rownum+1 as rownum 
            FROM MEDIA t, 
                 (SELECT @rownum := 0) r) x
   WHERE x.rownum >= @midpoint - ROUND(@midpoint/2)
ORDER BY x.id ASC
   LIMIT 10


 类似资料:
  • 校验者: @片刻 翻译者: @森系 分数和交叉验证分数 如我们所见,每一个估计量都有一个可以在新数据上判定拟合质量(或预期值)的 score 方法。越大越好. >>> from sklearn import datasets, svm >>> digits = datasets.load_digits() >>> X_digits = digits.data >>> y_digits = digi

  • 我在我的应用程序中有日期选择器,它工作得很好。但是我需要选择一周中的某一天而不是日期(即,如果我选择日期23,我需要获得像“星期五”这样的日子而不是数字)。我使用进行点击事件。 我需要一连串的日子(如星期一或星期二)..)用于上述代码中的< code>selectedDay

  • 问题内容: 我的数据具有日期(Ymd H:i:s)列(类型为datetime)。我想选择输入日期之前1周内的所有记录(在下面的示例中:2011-09-17 00:00:00,但是遇到了一些麻烦。这是我得到的: 我究竟做错了什么?谢谢 问题答案: 我想你错过在前面: 这是我运行的查询,适用于该零件: 您可以使用负值来执行“给定日期前N周”的查询,这样可以正常工作: 要么:

  • 问题内容: 我想从列中选择结果,但我需要相应的和。 结果集只需要显示一个,但显示为1且a 为Doe。 问题答案: 试试这个查询

  • 我有这样的复选框: 例如,如果选择周一、周三、周五、周六、周日。返回周一、周三、周五-周日 例如,如果选择Sat, Sun.返回Sat-Sun 例如,如果选择Mon, Tue, Thu, Sat, Sun返回Mon, Tue, Thu, Sat, Sun 我该如何实现这一点?这可能吗?

  • 范围选择器(rangeSelector)是图表中用于选择数据范围的工具,它提供了预配置的时间选择按钮,包括 1天,1周,1个月等,同时也提供时间输入框用于手动指定时间范围。 时间选择按钮 通过 rangeSelector.buttons 可以指定时间选择按钮,默认是 buttons: [{ type: 'month', count: 1, text: '1m' }, {