我设法创建了以下“每日报价”脚本。请访问www.kakivi.de,在右下角的“kindersprüche”处可以看到。
只要所有ID都是连续的,当前查询就可以正常运行。当缺少一个或多个ID时(因为记录已删除),该脚本显然也不会为不存在的特定ID返回引号。问题:如何使缺少的以下脚本“跳过” ID?感谢您的提示和建议。

SELECT id, spruch, vorname, nachname, datum_eintrag FROM kindersprueche
WHERE id=`datediff`(CURDATE(),'2015-02-22') MOD (SELECT COUNT(*)
FROM kindersprueche)

最佳答案

您可以执行以下操作:

SELECT id, spruch, vorname, nachname, datum_eintrag
FROM kindersprueche CROSS JOIN
     (SELECT MAX(id) as maxid FROM kindersprueche) n
WHERE id >= datediff(CURDATE(), '2015-02-22') MOD (maxid + 1)
ORDER BY id
LIMIT 1;


请注意,我将条件更改为使用MAX(id)而不是COUNT(*)。我还将其移至FROM子句中,因此更易于阅读查询。

编辑:

我认为解决此问题的方法是在引号中添加顺序列。您可以在查询中执行以下操作:

SELECT id, spruch, vorname, nachname, datum_eintrag
FROM (select k.*, (@rn := @rn + 1) as seqnum
      from kindersprueche cross join (select @rn := 0) params
     ) k CROSS JOIN
     (SELECT count(*) as cnt FROM kindersprueche) n
WHERE id >= datediff(CURDATE(), '2015-02-22') MOD (cnt + 1)
ORDER BY id
LIMIT 1;


解决此问题的其他方法:


在表中添加一列连续的(也许自动增加)的列并将其设置为没有间隙。
offsetlimit一起使用以获取值。但是,您需要在应用程序层而不是仅在查询中进行设置。

关于mysql - 当天查询的mysql报价:应付缺少的ID,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31394147/

10-11 02:31
查看更多