php 모든 데이터베이스 테이블의 행 개수 구하기

조회수 668회

데이터베이스 안의 모든 행의 개수를 구하려고 합니다. 지금 은

 $sql = "SELECT table_name , table_rows FROM INFROMATION_SCHEMA.TABLES
               WHERE TABLE_SCHEMA = '테이블 이름';

 $res = mysqli_query($conn, $sql);

 echo json_encode(array("RES" => $res));

이 코드를 사용중인데

RES":{"current_field":null,"field_count":null,"lengths":null,"num_rows":null,"type",null};

이런 코드로 반환이 됩니다..

+------------------+-----------------+
| table_name       | exact_row_count |
+------------------+-----------------+
| func             |               0 |
| general_log      |               0 |
| help_category    |              37 |
| help_keyword     |             450 |
| help_relation    |             990 |
| help_topic       |             504 |
| host             |               0 |
| ndb_binlog_index |               0 |
+------------------+-----------------+

이런식의 결과값을 json 으로 받아오는 방법이 있을까요??

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 사실 원하시는 결과셋 자체는 순수 MySQL구문 쿼리 1개만으로도 얻을 수 있는 모양입니다만, 뭔가 GROUP_CONCAT()이니 INTO @sql이니 하는 낯선 것도 많고... 기왕 PHP 태그가 달려 있으니... 한번 PHP를 써보죠.

    상기 링크된 참조정보도 그렇고 핵심 아이디어는 이 작업을 2단계로 나눠서 하자는 겁니다.

    1. 테이블 일람을 구한다.
    2. 각각 count(*)를 한다.
    $rows_per_tables = [];
    
    $sql1 = 'SELECT table_name
        FROM information_schema.tables
        WHERE table_schema = :schema
        AND table_type = :type';
    $query1 = $pdo->prepare($sql1);
    $query1->execute([
        'schema' => DB스키마이름,
        'type' => 'BASE_TABLE'
    ]);
    
    while ($row = $query1->fetch()) {
        $table = $row['table_name'];
        $sql2 = 'SELECT COUNT(*) as rows FROM :table';
        $query2 = $pdo->prepare($sql2);
        $query2->execute(compact('table'));
        $count = $query2->fetch();
        $exact_row_count = $count['rows'];
        $rows_per_tables[] = compact('table', 'exact_row_count');
    }
    
    echo json_encode(['RES' => $rows_per_tables]);
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)