是否可以在MySQL的SELECT * WHERE
查询中使用“主键”而不是列?
示例情况:
table1:
name (P) | surname
table2:
page (P) | content
我试过(PHP)
SELECT * FROM $table WHERE PRIMARY=$row
并且没有返回任何内容(尽管PHPMyAdmin突出显示它)。
我想这样做,因为我想创建一个getDbData
函数,我只需要指定表($table
)和行($row
,行名是主键值)它返回我需要的单行。
答案 0 :(得分:6)
我猜您不想提供主键的名称,而是自动选择它。在这种情况下,您应首先获取主键的列名,然后将简单查询传递给主键的名称。
// first query
SELECT k.column_name
FROM information_schema.table_constraints t
JOIN information_schema.key_column_usage k
USING(constraint_name,table_schema,table_name)
WHERE t.constraint_type='PRIMARY KEY'
AND t.table_schema='YourDatabase'
AND t.table_name='YourTable';
// second query
SELECT * FROM $table WHERE $primary=$row
其中$primary
是您通过运行第一个查询获得的列名。
更好的方法是使用SHOW KEYS,因为您并不总是可以访问information_schema。以下作品:
SHOW KEYS FROM table WHERE Key_name = 'PRIMARY'
// Column_name will contain the name of the primary key.