当天查询的mysql引用:应对缺少的id

时间:2015-07-13 21:53:45

标签: mysql

我设法创建了以下“当天的引用”脚本。查看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)

1 个答案:

答案 0 :(得分:0)

你可以这样做:

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来获取值。但是,您需要在应用程序层中进行设置,而不是仅在查询中进行设置。