mysql'WHERE'条件中的列号
Posted
技术标签:
【中文标题】mysql\'WHERE\'条件中的列号【英文标题】:Column number in mysql 'WHERE' conditionmysql'WHERE'条件中的列号 【发布时间】:2021-10-13 22:27:34 【问题描述】:如何选择Where clause
中的第一列。我正在尝试创建一个php
函数来根据id
检索表数据,但是由于id
列的标题在各个表中不同,我需要将Where 子句中的第一列称为第一列始终是 id 列。
该场景将类似于以下内容,但它会引发错误并指出 SQL 语法中存在错误。
$stmt = $this->conn->prepare("SELECT * FROM $table WHERE column(1) = :id");
提前致谢。
【问题讨论】:
AFAIK,mysql 没有任何这样的功能。像这样依赖列的顺序似乎不太可靠。 只有在GROUP BY
和ORDER BY
中才能按编号引用列。
不是一个好主意。但是,如果您真的想这样做,可以通过information_schema.columns.ordinal_position
动态生成该查询。
谢谢亲爱的@Barmar。有什么策略可以绕过这个问题?
相关:***.com/q/52559333/2943403(未答复的重复)
【参考方案1】:
我认为没有内置的方法可以做到这一点。但是您可以查询INFORMATION_SCHEMA.COLUMNS
来获取列名。
$col_stmt = $this->conn->prepare("
SELECT column_name
FROM information_schema.columns
WHERE table_schema = DATABASE()
AND ordinal_position = 1
AND table_name = :table");
$col_stmt->execute([':table' => $table]);
$first_col = $col_stmt->fetchColumn();
$stmt = $this->conn->prepare("SELECT * FROM `$table` WHERE `$first_col` = :id");
【讨论】:
单程访问数据库怎么样? 你可以在存储过程中做同样的事情。想不出任何其他方法可以通过一次前往 DB 来完成。【参考方案2】:由于没有内置的方法来执行此操作,我想出了以下代码块来获取第一列,然后在我的 SELECT 语句中使用它。
$stmt = $this->conn->query("SHOW columns FROM $table");
return $stmt->fetch(PDO::FETCH_LAZY)[0];
我认为这个策略比Barmar
的策略要短一些,尽管他是完全正确的。
【讨论】:
以上是关于mysql'WHERE'条件中的列号的主要内容,如果未能解决你的问题,请参考以下文章