使用 limit(20) 它只运行 DB 的前 20 个值
with limit(20) it runs only the first 20 values of DB
在这行代码中,它 select 只是前 20 个,但我想要第一次 select 前 20 个,然后是另一个等等 :'(
我该如何解决这个问题?
function something_cron()
$query = db_select('watchdog', 'wa')
->extend('PagerDefault')
->orderBy('wid')
->fields('wa', array('variables', 'type', 'severity',
'message', 'wid', 'timestamp'))
->limit(20);
$result = $query->execute();
// Loop through each item and add to $row.
foreach ($result as $row) {
someother();
}
我也想避免这个 PagerDefault 但我不能..
第一次尝试这个 运行:
$query = db_select('watchdog', 'wa')
->extend('PagerDefault')
->orderBy('wid')
->fields('wa', array('variables', 'type', 'severity','message', 'wid', 'timestamp'))
->range(0,20);
$result = $query->execute();
这是第二个
$query = db_select('watchdog', 'wa')
->extend('PagerDefault')
->orderBy('wid')
->fields('wa', array('variables', 'type', 'severity','message', 'wid', 'timestamp'))
->range(20,20);
$result = $query->execute();
继续增加范围函数的第一个参数。
"offset" 的作用是忽略前 x 行。如果您有 100 行并且想要最后 35 行,您可以执行 "->range(65,35);"
编辑:
这是 range() 工作原理的示例。
首先,如果您不显示寻呼机,则不需要 PagerDefault。你可以在没有它的情况下使用 orderBy and range。
如果我理解你的 post,每次 cron 是 运行,你需要看门狗 table 的前 20 行。如果是这种情况,我建议跟踪您从 table 获得的最后一个看门狗 ID (wid),并将其用于每个后续 运行。类似于:
$wid = variable_get('my_last_wid', 0);
$result = db_select('watchdog')
->fields('watchdog', array('variables', 'type', 'severity', 'message', 'wid', 'timestamp'))
->condition('wid', $wid, '>')
->orderBy('wid')
->range(0, 20)
->execute();
foreach ($result as $watchdog) {
// do whatever you need to do
}
if (!empty($watchdog)) {
variable_set('my_last_wid', $watchdog->wid);
}
在这行代码中,它 select 只是前 20 个,但我想要第一次 select 前 20 个,然后是另一个等等 :'( 我该如何解决这个问题?
function something_cron()
$query = db_select('watchdog', 'wa')
->extend('PagerDefault')
->orderBy('wid')
->fields('wa', array('variables', 'type', 'severity',
'message', 'wid', 'timestamp'))
->limit(20);
$result = $query->execute();
// Loop through each item and add to $row.
foreach ($result as $row) {
someother();
}
我也想避免这个 PagerDefault 但我不能..
第一次尝试这个 运行:
$query = db_select('watchdog', 'wa')
->extend('PagerDefault')
->orderBy('wid')
->fields('wa', array('variables', 'type', 'severity','message', 'wid', 'timestamp'))
->range(0,20);
$result = $query->execute();
这是第二个
$query = db_select('watchdog', 'wa')
->extend('PagerDefault')
->orderBy('wid')
->fields('wa', array('variables', 'type', 'severity','message', 'wid', 'timestamp'))
->range(20,20);
$result = $query->execute();
继续增加范围函数的第一个参数。
"offset" 的作用是忽略前 x 行。如果您有 100 行并且想要最后 35 行,您可以执行 "->range(65,35);"
编辑: 这是 range() 工作原理的示例。
首先,如果您不显示寻呼机,则不需要 PagerDefault。你可以在没有它的情况下使用 orderBy and range。
如果我理解你的 post,每次 cron 是 运行,你需要看门狗 table 的前 20 行。如果是这种情况,我建议跟踪您从 table 获得的最后一个看门狗 ID (wid),并将其用于每个后续 运行。类似于:
$wid = variable_get('my_last_wid', 0);
$result = db_select('watchdog')
->fields('watchdog', array('variables', 'type', 'severity', 'message', 'wid', 'timestamp'))
->condition('wid', $wid, '>')
->orderBy('wid')
->range(0, 20)
->execute();
foreach ($result as $watchdog) {
// do whatever you need to do
}
if (!empty($watchdog)) {
variable_set('my_last_wid', $watchdog->wid);
}