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 users,显示表的所有信息,但不是在一个有组织的数组中。我找到了一种使用 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 回答