0
SELECT address
  FROM user_address
 WHERE username = '$user->name'
 ORDER BY time DESC
 LIMIT 1 

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

4

4 回答 4

0

您可以使用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);
于 2018-03-06T15:20:21.080 回答
0

为此,我们使用 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 以满足您的需要

于 2018-03-05T03:53:04.330 回答
0

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

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

于 2018-03-06T09:24:01.433 回答
0

尝试这个:

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

于 2018-03-05T10:19:53.807 回答