【问题标题】:Why is my sql count printing alphabetical text?为什么我的 sql 计数打印字母文本?
【发布时间】:2015-12-06 01:05:16
【问题描述】:
    $users = mysql_query("SELECT *, COUNT(votes.id) FROM users INNER JOIN votes
                                ON users.id=votes.recipientuserid WHERE votes.datenumber >='2014' ");

    while($user = mysql_fetch_array($users)){
        $count = $user[COUNT(votes.id)];
    }

在 phpmyadmin 中,查询计数显示一个数字。 $count 的值不是数字,而是 users.username 值。为什么?

【问题讨论】:

  • 那就是$user['COUNT(votes.id)']。但是您应该在查询中使用别名:SELECT *, COUNT(votes.id) as cnt FROM users.... 然后$count = $user['cnt'];
  • @Bart 如果我选择的是用户而不是投票,则不是。
  • 为什么需要别名? @VolkerK
  • 使其更具可读性和健壮性。但它可能适用于$user['COUNT(votes.id)'] votes 和 id -> count('votesid') -> 1 -> $user[1] 这可能是您通过 * 选择的字段

标签: php mysql sql join


【解决方案1】:

实现您想要的一种方法是通过添加字段名称来修改查询,以便您可以像访问结果中的任何其他字段一样访问它:

SELECT *, COUNT(votes.id) as nbvotes FROM users ...

而from php一旦有了结果,就可以这样访问了

$row['nbvotes']

其中 $row 是包含从 mysql 返回的记录的变量。不要忘记撇号。

干杯

【讨论】:

  • 为什么我必须使用 as 功能?它有什么作用,我为什么需要它?
  • @desbest:为 SELECT 列表中的表达式分配一个别名,以显式指定结果集中列的名称。分配别名可能不是绝对必要的,但这是一种常见的模式。我认为它使代码更具可读性,它遵循您用于其他列的模式 = $user['mycount'];。考虑 SELECT 列表中更复杂的表达式的示例,例如SUM(IF((c.id MOD 10) > 4), 1, 0),您就会明白为什么需要为表达式分配别名。
【解决方案2】:
$users = mysql_query("SELECT  COUNT(votes.id) as count FROM users INNER JOIN votes
                                ON users.id=votes.recipientuserid WHERE votes.datenumber >='2014' ");

    while($user = mysql_fetch_array($users)){
        $count = $user['count'];
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-24
    • 1970-01-01
    • 1970-01-01
    • 2017-01-08
    • 1970-01-01
    • 2015-08-26
    相关资源
    最近更新 更多