如何在 MySQL 查询中返回相关字段而不是参考号

Posted

技术标签:

【中文标题】如何在 MySQL 查询中返回相关字段而不是参考号【英文标题】:How to return related field instead of reference number in a MySQL query 【发布时间】:2012-03-29 09:58:39 【问题描述】:

我有一个用于许多表的通用 mysql 语句,它只检索单个表的所有数据:

$table = "profiles";//set static for example
$result = mysql_query("SELECT * FROM `$table`");

我希望结果显示来自position 的文本,而不是job_id。 如果我仍然希望我的查询保持通用,并且可能有多个字段引用到我希望相关文本而不是 id 的其他表,我该怎么做?

mysql> show columns from profiles;
+-------------+--------------+------+-----+---------+----------------+
| Field       | Type         | Null | Key | Default | Extra          |
+-------------+--------------+------+-----+---------+----------------+
| staff_id    | int(11)      | NO   | PRI | NULL    | auto_increment | 
| job_id      | int(11)      | NO   |     | NULL    |                | 
| name        | varchar(100) | NO   |     | NULL    |                | 
+-------------+--------------+------+-----+---------+----------------+

mysql> show columns from job_positions
+-------------+--------------+------+-----+---------+----------------+
| Field       | Type         | Null | Key | Default | Extra          |
+-------------+--------------+------+-----+---------+----------------+
| job_id      | int(11)      | NO   | PRI | NULL    | auto_increment | 
| position    | varchar(100) | NO   |     | NULL    |                |
+-------------+--------------+------+-----+---------+----------------+

我可以在这些字段上设置某种关系,然后使用查询发出命令以返回相关文本而不是 id 吗?

【问题讨论】:

听起来你想要一个好的 php ORM 库:***.com/questions/108699/good-php-orm-library 【参考方案1】:

你可以创建一个视图:

create or replace view info as
select p.job_id as job_id, p.name as name, j.position as position
from profile as p, job_position as j where p.job_id=j.job_id

那么您仍然可以使用您的查询

$table = "info";
$result = mysql_query("SELECT * FROM `$table`");

【讨论】:

这看起来很有希望,但是没有视图的表呢?有没有办法检查表上的视图,如果有,运行查询 where $table = $tablename."_view" else $table = $tablename? 通用 mysql 语句的要点是 $table 是从用户操作自动分配的,例如他们单击配置文件按钮,以便将“配置文件”分配为 $table。我无法将其更改为“people_view”,因为这会破坏程序中的其他内容。因此,我需要在运行 SQL 之前对其进行更改。因此,如果我调用我创建的视图'profile_view',我可以使用 $table.'_view' 但是使用此通用语句的其他查询将失败,因为没有为它们创建视图,因此没有 $table.'_view'

以上是关于如何在 MySQL 查询中返回相关字段而不是参考号的主要内容,如果未能解决你的问题,请参考以下文章

即使数据库将 0 存储为字段值,Django 查询集对象也返回 None 而不是 0

distinct mysql过滤重复记录

如何在mysql中查询所有表是不是包含某个字段

MongoDB返回指定字段的方法

MySql中distinct的用法

如何在 MySQL/MariaDB 中将 LONGTEXT 字段作为 JSON 返回