我设法创建了以下“每日报价”脚本。请访问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;
解决此问题的其他方法:
在表中添加一列连续的(也许自动增加)的列并将其设置为没有间隙。
将
offset
与limit
一起使用以获取值。但是,您需要在应用程序层而不是仅在查询中进行设置。关于mysql - 当天查询的mysql报价:应付缺少的ID,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31394147/