【问题标题】:Convert SQL query into Drupal 7 PHP rules将 SQL 查询转换为 Drupal 7 PHP 规则
【发布时间】:2018-08-12 15:09:21
【问题描述】:
SELECT address
  FROM user_address
 WHERE username = '$user->name'
 ORDER BY time DESC
 LIMIT 1 

这是我能理解的 SQL 查询。如何将其转换为 Drupal 的 7 PHP?我试图弄清楚这一天,并尝试了不同的方法,但似乎我在这方面做得不好。

【问题讨论】:

  • 使用视图模块。使用 CMS 的重点是避免自定义代码、自定义查询等。

标签: drupal drupal-7 drupal-database


【解决方案1】:

你可以使用db_select

$results = db_select('user_address', 'ua')
        ->fields('ua', array('address'))
        ->condition('ua.username', $user->name, '=')
        ->orderBy('ua.time', 'DESC')
        ->range(0,1)
        ->execute()
        ->fetchAll();
  var_dump($results);

否则你可以使用db_query,如果你想写完整的SQL:

$results = db_query("SELECT address
  FROM user_address
 WHERE username = :username
 ORDER BY time DESC
 LIMIT 1 ", array(':username' => $user->name))->fetchAll();

var_dump($results);

终于可以使用db_query_range了:

$page = 0;
$limit = 1
$results = db_query_range("SELECT address
      FROM user_address
     WHERE username = :username
     ORDER BY time DESC", 
    $page * $limit, 
   $limit,   
   array(':username' => $user->name))
   ->fetchAll();

    var_dump($results);

【讨论】:

    【解决方案2】:

    试试这个:

    $result = db_select('user_address', 'ua')
    		->fields('ua', array('address'))
    		->condition('ua.username', $user->name)
    		->execute()
    		->fetchAll();

    【讨论】:

      【解决方案3】:

      为此,我们使用 db_select() 或 db_query() - 第一个更可取。

       $query = db_select('user_address', 'u');
      
      // Add condition and fields 
      $query->condition('u.username', ‘james’)
       $query->fields('u’ array('u.address'));
      

      // 执行它

          $result = $query->execute();
         foreach ($result as $record) {
          // Do something with each $record
           }
      

      更多请看 https://www.drupal.org/docs/7/api/database-api/dynamic-queries/introduction-to-dynamic-queries

      更新:见条件部分。此外,您可以将其放入站点的模块或 php 可执行区域或通过 drush 命令行。 更改用户名 James 以满足您的需要

      【讨论】:

      • 仍然错误,即使我删除了`并用''替换它们,在字段后添加了一个逗号('u' ->,
      • 我不应该有'=='。它应该没有那个,因为默认检查是否相等或只是'='。查看更新的答案(条件行结束)
      • 保留单引号
      【解决方案4】:

      $result = $result = db_select('usr_address','u')
                ->fields('u',array('address','uid'))
                ->range(0,1)
      		  ->orderby('time', 'DESC')
                ->condition('u.uid',$uid,'=')
                ->execute();

      这是它的实际工作方式。 谢谢你的建议,但最后我做到了。我自己。嗯,有点;D

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-03-22
        • 1970-01-01
        • 2020-01-09
        • 2018-12-21
        • 1970-01-01
        • 2015-09-18
        • 2018-01-12
        相关资源
        最近更新 更多