【问题标题】:My code do not run with this 'join'我的代码不使用此“加入”运行
【发布时间】:2015-03-24 09:25:49
【问题描述】:

我有一张名为“distinct”的空表。 Thiw 表有一些名为“wid”、“变量”和“时间戳”的列...我有以下代码:

// Begin building the query.
  $query = db_select('watchdog', 'wa');
  $query->join('distinct', 'd', 'wa.wid = d.wid');
  $query->fields('wa', array('variables', 'wid', 'timestamp', 'type', 'message',
    'severity'))
    ->range(0, 20);
  $result = $query->execute();

  // Loop through each item and add to $row.
  foreach ($result as $row) {
    $delete_old_rows = db_delete('distinct')
      ->condition('variables', $variables, '=')
      ->condition('timestamp', $timestamp, '<')
      ->execute();

    $select_same_variables = db_select('distinct', 'd')
      ->fields('d')
      ->condition('variables', $variables, '=')
      ->execute();
    if ($select_same_variables->rowCount() == 0) {
      $query = db_insert('distinct')
        ->fields(array('timestamp' => $timestamp, 'wid' => $wid,                                          
           'variables' => $variables,
    ))
    ->execute();
  }

当我在没有加入的情况下运行这段代码时,一切都很完美,但它只运行 20 个值。当我用加入运行它时,没有一次进入“for”循环......为什么我会遇到这个问题?

【问题讨论】:

  • 可能与问题无关,但DISTINCT是mysql中的保留字。 dev.mysql.com/doc/refman/5.0/en/reserved-words.html
  • 我知道我不想这样想:(
  • 尝试用`括起来表名。喜欢:$select_same_variables = db_select('`distinct`', 'd')
  • 以及我如何解决这个问题,我想我想加入 2 个表,并且当 cron 运行以从 watchdog 中推送每 20 个值时,它发现的 disticts ......有什么想法吗??

标签: php mysql database drupal drupal-7


【解决方案1】:

Distinct、Timestamp 和 Type 听起来像是许多不同数据库中的保留字。最好不要使用保留字命名列(或表),即使您的数据库允许这样做。

至于循环只运行了 20 次,可能是由于某些意外数据(可能是时间戳的空值)直到第 20 次迭代才出现。

【讨论】:

    猜你喜欢
    • 2022-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多