0

PDOを使用してmysqlで外部関連のテーブル名を取得しようとしています。たとえば、私は持っています:

ユーザー テーブル

+------------+----------+------+-----+-----+----------------+
| Field      | Type     | Null | Key |  AI | Foreign Keys   |
+------------+----------+------+-----+-----+----------------+
| id         | int(255) | NO   | PRI | yes |                |
| username   | char(16) | NO   |     |     |                |
| password   | char(32) | NO   | UNI |     |                |
| group      | int(255) | NO   | MUL |     | mytable.group  |
| created    | datetime | NO   |     |     |                |
+------------+----------+------+-----+-----+----------------+

グループテーブル

+------------+----------+------+-----+-----+----------------+
| Field      | Type     | Null | Key |  AI | Foreign Keys   |
+------------+----------+------+-----+-----+----------------+
| id         | int(255) | NO   | PRI | YES |                |
| name       | char(16) | NO   | UNI |     |                |
| description| TEXT     | YES  |     |     |                |
+------------+----------+------+-----+-----+----------------+

外部テーブル assoc(users.group => group ) の名前を動的に取得したい。SHOW COLUMNS および DESCRIBE コマンドは関連付けを表示しません。

誰かがそれを行う方法を知っていれば、私はとても感謝しています。ありがとう!

4

2 に答える 2

4

SHOW CREATE TABLE ユーザーは、テーブルのすべての情報を表示しますが、整理された配列ではありません。SQL を使用してすべての関連データを動的に取得する方法を見つけました。

SELECT 
      ke.column_name col, 
      ke.referenced_table_schema assoc_db,
      ke.referenced_table_name assoc_table,
      ke.referenced_column_name assoc_col
FROM
      information_schema.KEY_COLUMN_USAGE ke
WHERE
      ke.referenced_table_name IS NOT NULL              
AND   ke.table_schema='YOUR_DATABASE_NAME'
AND   ke.table_name='YOUR_TABLE_NAME'

私の例は次を返します:

array(
      public 'col' => string 'group' (length=5) //field with foreign data
      public 'assoc_db' => string 'mytable' (length=6)  //foreign db 
      public 'assoc_table' => string 'group' (length=5) //foreign table
      public 'assoc_col' => string 'id' (length=2) //foreign field
);
于 2012-08-21T22:58:30.623 に答える
2

これを試して:

SHOW CREATE TABLE users
于 2012-08-21T22:15:17.863 に答える