sql >> データベース >  >> RDS >> Mysql

フィールドタイプと値を取得する方法は?

    編集: 眠れないので出力をテーブルに入れました...

    わかりました...これがあなたの望むものかどうかを確認してください...

    これは私が別のSOの質問のために作成した表です:

    mysql> describe user;
    +-------------+------------------+------+-----+---------+----------------+
    | Field       | Type             | Null | Key | Default | Extra          |
    +-------------+------------------+------+-----+---------+----------------+
    | User_ID     | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
    | Email       | varchar(100)     | YES  |     | NULL    |                |
    | Name        | varchar(100)     | YES  |     | NULL    |                |
    | Password    | varchar(100)     | YES  |     | NULL    |                |
    | FB_ID       | int(11)          | YES  |     | NULL    |                |
    | Total_Score | int(11)          | YES  |     | 0       |                |
    | add_date    | datetime         | YES  |     | NULL    |                |
    +-------------+------------------+------+-----+---------+----------------+
    7 rows in set (0.00 sec)
    

    およびDBから:

    mysql> select * from user limit 1;
    +---------+-------+------+----------+-------+-------------+---------------------+
    | User_ID | Email | Name | Password | FB_ID | Total_Score | add_date            |
    +---------+-------+------+----------+-------+-------------+---------------------+ 
    |       1 | NULL  | kim  | NULL     |  NULL |          10 | 2013-11-03 23:04:08 |
    +---------+-------+------+----------+-------+-------------+---------------------+
    +
    1 row in set (0.00 sec)
    

    そしてコード:

    <?php
    $mysqli = mysqli_connect("localhost", "root", "", "test");
    
    // this came from http://php.net/manual/en/mysqli-result.fetch-field-direct.php 
    $mysql_data_type_hash = array(
        1=>'tinyint',
        2=>'smallint',
        3=>'int',
        4=>'float',
        5=>'double',
        7=>'timestamp',
        8=>'bigint',
        9=>'mediumint',
        10=>'date',
        11=>'time',
        12=>'datetime',
        13=>'year',
        16=>'bit',
        //252 is currently mapped to all text and blob types (MySQL 5.0.51a)
        253=>'varchar',
        254=>'char',
        246=>'decimal'
    );
    
    // run the query... 
    $result = $mysqli->query("select * from user limit 1"); 
    
    // get one row of data from the query results 
    $proceso = mysqli_fetch_assoc($result);
    
    print "<table>
            <tr>
               <th>\$key</th>
               <th>\$value</th>
               <th>\$datatype</th>
               <th>\$dt_str</th>
            </tr>  ";
    
    // to count columns for fetch_field_direct()
    $count = 0; 
    
    // foreach column in that row...
    foreach ($proceso as $key => $value) 
    {
      $datatype = $result->fetch_field_direct($count)->type;  
      $dt_str   = $mysql_data_type_hash[$datatype];
      $value    = (empty($value)) ? 'null' : $value;  
    
      print "<tr>
               <td>$key</td>
               <td>$value</td>
               <td class='right'>$datatype</td>
               <td>$dt_str</td>
             </tr>  ";  
      $count++; 
    } 
    
    print "</table>"; 
    
    mysqli_close($mysqli);
    ?> 
    
    <style>
       /* this is css that you don't need but i was bored so i made it pretty...! */
       table   { font-family:Courier New; 
                 border-color:#E5E8E3; border-style:solid; border-weight:1px; border-collapse:collapse;}
       td,th   { padding-left:5px; padding-right:5px; margin-right:20px; 
                 border-color:#E5E8E3; border-style:solid; border-weight:1px; }
       .right  { text-align:right }
    </style>
    

    だから...明確にするために...

    これらの変数は、そのforeachで使用できます。 必要に応じて情報を出力または使用するには:(例として、user_idの出力の最初の行を使用しています)

    • $key 列/フィールド名(user_idなど) )

    • $field_types[$key] $result->fetch_field_direct($i)->typeから取得されます (3など )

    • $mysql_data_type_hash[$datatype] $mysql_data_type_hashを使用したデータ型の文字列バージョンです。 コードの先頭にある配列。これは必須ではありませんが、この例をより明確にするために含めました。 (intなど )

    • $proceso[$key] = $value = foreachステートメントのこの反復の値です(1など) )

    出力:

    $key           $value          $datatype      $dt_str
    User_ID        1                       3      int
    Email          null                  253      varchar
    Name           kim                   253      varchar
    Password       null                  253      varchar
    FB_ID          null                    3      int
    Total_Score    10                      3      int
    add_date       2013-11-03 23:04:08    12      datetime
    



    1. mysqlは、ロールアップを使用して2つのテーブルの合計を結合します。

    2. オラクルマテリアライズドビューの更新時間

    3. SQL Server2005DateAddを使用して日付に日を追加する

    4. postgresで最小または最大のinet/cidrを照会する方法