【问题标题】:How do you get the seed fieldname from a table programmatically?如何以编程方式从表中获取种子字段名?
【发布时间】:2012-05-15 19:44:36
【问题描述】:

有没有办法得到种子字段名? 我所说的种子是指用这样的东西创造的领域; INT NOT NULL AUTO_INCREMENT 主键

我计划使用它(以编程方式获取种子字段名称)提出最快的 SQL 查询来获取表中的记录数。

我打算写的函数是这样的。请填空并提供 getSeed 函数内部机制。

function get_record_count ($dbh,$table,$where){

//get the seedfield name in the {table} programmatically

$seed = getSeed($dbh,$table);
$sql = "select count({$seed}) as `count` from {$table} " . $where; 

//do the mysql query & get num rows to return it... 


}

【问题讨论】:

  • 你的意思是列名,对吧?
  • 您为什么专门针对该列使用 COUNT?它是否允许 NULL 并且您不想计算它们? mysqlperformanceblog.com/2007/04/10/count-vs-countcol
  • @Moyed 是的。这是我要的列名。
  • @Marcus 为什么种子里面会有一个NULL?计算种子 = 计算记录数。不是吗?
  • 没有。 COUNT() 不计算 NULL 值。如果您的种子列允许 NULL,则计算种子与计算记录数不同。

标签: mysql count seed


【解决方案1】:

如果您不想计算列中非 NULL 值的数量(COUNT(expr) 不计算 NULL),那么只需使用 SELECT COUNT(*) 并让 MySQL 使用与WHERE 子句回答COUNT(*)

$sql = "SELECT COUNT(*) AS `count` FROM {$table} " . $where; 

【讨论】:

  • count(seed) from table .... 有什么问题?为什么我们谈论空值? mysql如何允许种子值在它开始时有一个空值。明白我的意思了吗?
  • @AverageJoe,在您的问题中,{$seed} 扩展为什么?它只是一个列名吗?
  • seed 是一个在创建表时由类似这样的东西创建的字段。 INT NOT NULL AUTO_INCREMENT 主键,
  • @AverageJoe,那就不要用COUNT(column),用COUNT(*),不仅是为了最好的性能,也是为了最简单的代码。 COUNT(*) 表示计算行数,无论它们是否具有 NULL 值,但让 MySQL 决定用于确定这一点的最佳列(索引)。 mysqlperformanceblog.com/2007/04/10/count-vs-countcol
猜你喜欢
  • 2022-12-20
  • 1970-01-01
  • 2017-07-27
  • 1970-01-01
  • 2018-05-07
  • 2019-06-08
  • 1970-01-01
  • 2010-12-22
  • 1970-01-01
相关资源
最近更新 更多