it-swarm-ko.tech

페이지가 매겨진 목록으로 SQL 테이블 표시

나는 다음을 시도하고 있으며 작동합니다.

my.module :

   function my_menu() {
      $items['page_example'] = array(
        'title' => 'Page Example',
        'description' => 'Page Example',
        'page callback' => 'page_example',
        'access callback' => TRUE,
        'file' => 'my.page.inc',
        'file path' => drupal_get_path('module', 'my'),
        'type' => MENU_CALLBACK,
      );
     return $items;
   }

my.page.inc:

function page_example() {
  return array(
    'page_example' => array(
      '#type' => 'markup',
      '#markup' => generate_list(),
    ),
  );
}

function generate_list() {
  $query = db_select('users', 'name')
    ->extend('PagerDefault')
    ->fields('name', array('Name'))
    ->orderBy('created', 'DESC')
    ->limit(20);

  $result = $query->execute();
  $output = '';
  foreach ($result as $row) {
    $output .= $row->name.'<br/>';
  }

  $output .= theme('pager');
  return $output;
}

하지만 각 행에 id-필드를 추가하려고 시도했지만 실패합니다.

  $query = db_select('users', 'name', 'uid')
    ->extend('PagerDefault')
    ->fields('name', array('Name'), 'uid', array('Id'))
    //->addField('uid', 'User Id')
    //->addField('name', 'User Name')
    ->orderBy('created', 'DESC')
    ->limit(20);

  $result = $query->execute();
  $output = '';
  foreach ($result as $row) {
    $output .= $row->uid.': '.$row->name.'<br/>';
  }

오류 :

Recoverable fatal error: Argument 3 passed to db_select() 
must be an array, string given, called in my.page.inc 
on line 13 and defined in function db_select() 
(line 2387 in includes/database/database.inc).

업데이트 :

Camsoft의 의견 (감사합니다)에서 코드를 다음과 같이 수정했습니다.

  $query = db_select('users')
    ->extend('PagerDefault')
    ->fields('name', array('Name'), 'uid', array('Id'))
    //->addField('uid', 'User Id')
    //->addField('name', 'User Name')
    ->orderBy('created', 'DESC')
    ->limit(20);

그리고 지금은 실패합니다

DOException: SQLSTATE[42P01]: Undefined table: 7 ERROR: 
missing FROM-clause entry for table "name" at character 8: 
SELECT name.Name AS Name, created AS created FROM {users} 
users ORDER BY created DESC LIMIT 20 OFFSET 0; Array ( ) 
in function PagerDefault->execute() (line 80 includes/pager.inc).

나는 단지 알아 내려고 노력하고있다 페이지가 매겨진 db_select에 두 번째 SQL 테이블 필드를 추가하는 방법 ... DBTNG를 이해하려고하므로 나에게 "보기"를 제안하지 마십시오. 현재.

3
Alexander Farber

db_select() 호출 및 다음 메서드 호출이 잘못되었습니다.

  • db_select()의 두 번째 매개 변수는 테이블 별칭이며 쿼리에서 사용하는 필드를 참조 할 때 사용해야합니다.
  • fields()에 전달 된 매개 변수가 잘못되었습니다. db_select()에 대한 호출의 예는 다음 스 니펫을 참조하십시오.
 $ result = db_select ( 'file_usage', 'f') 
-> fields ( 'f', array ( 'module', 'type', 'id', 'count')) 
-> condition ( 'fid', $ file-> fid) 
-> condition ( 'count', 0, '>') 
-> execute (); 

db_select()에 대한 호출은 다음과 같이 다시 작성되어야합니다.

$query = db_select('users', 'u')
  ->fields('u', array('name', 'uid'))
  ->orderBy('created', 'DESC')
  ->limit(20)
  ->extend('PagerDefault');
5
kiamlaluno

이 작업을 수행하기 위해 Views 모듈을 사용할 수 없습니까?

보기를 만들 때보기 유형 목록에서 User를 선택하기 만하면됩니다. 프로그래밍 방식으로 수행하는 것보다 훨씬 쉽습니다.

업데이트


db_select 에 대한 문서에 따르면 세 번째 매개 변수는 $ options 배열이어야합니다.

db_select ($ table, $ alias = NULL, 배열 $ options = array ())

단서는 오류 메시지에 있습니다.

복구 가능한 치명적인 오류 : db_select ()에 전달 된 인수 3은 my.page.inc에서 호출 된 배열, 문자열이어야합니다.

코드는 uid 문자열을 세 번째 매개 변수로 전달합니다.

2
Camsoft