【问题标题】:Count occurrence in table PHP echo计算表 PHP 回显中的出现次数
【发布时间】:2014-06-17 13:07:31
【问题描述】:

我是 PHP 和 MySQL 的新手,虽然整个 StackOverflow 中有很多关于这方面的示例,但没有一个非常适合我的情况。

所以,我有一个表格(名为 votes),如下所示:

 student_name | student_id | teacher
----------------------------------------
Joe           | 991991991  | Mr. Smith
Sally         | 717356152  | Ms. Lozano
Benny         | 383717747  | Mr. Johnson
Jim           | 191918918  | Mr. Smith
John          | 182783718  | Mr. Smith
Alfred        | 374878372  | Mr. Johnson

我想要一个HTML/PHP 页面在我的一个 DIV 中输出此内容,自动循环遍历教师的所有选项并计算每个教师出现的次数。我希望它在添加新教师时自动计数,这样我就不必更改代码后记。

Mr. Smith: 3
Mr. Johnson: 2
Ms. Lozano: 1

它不需要按任何顺序,我不应该把它们从最小到最大。

我试过做类似的事情

<?php SELECT teacher, SUM(1) FROM votes GROUP BY teacher ?>

SELECT teacher, count(teacher) 
  FROM votes 
 GROUP by teacher

但它们不起作用并给我一个错误"syntax error, unexpected 'teacher' (T_STRING)" 我可能只是错误地执行它们。它们只是出现在自己的 中,还是需要自己的连接或自己的 while 语句或之前的东西?

有什么建议吗?

编辑:这是我的完整正文代码与我的连接...

$connection = mysql_connect($serverName, $userName, $password) or die('Unable to connect to Database host' . mysql_error());
$dbselect = mysql_select_db($dbname, $connection) or die("Unable to select database:$dbname" . mysql_error());
?>
</head>
    <body>
    <div align="center">
    <form method="post" action="vote_1.php">
    <h1>Counted Vote Totals</h1>
    <h4>(these values are current)</h4>
    <h2>Votes by Cantidate</h2>
    <?php SELECT teacher, count(teacher) 
  FROM votes 
 GROUP by teacher ?>
</br></br></br>
</form>
</body>

由于密码等原因,我没有包括我的头。

【问题讨论】:

  • 首先你不能做&lt;?php SELECT teacher, SUM(1) FROM votes GROUP BY teacher ?&gt;,如果那是你试图运行的实际代码。您首先需要连接到数据库,然后查询。
  • 不能直接将SQL语句放入PHP中,必须使用数据库API。要学习的是 PDO 和 mysqli,它们在 PHP 文档中。
  • 根据您的编辑;你不能那样做。如果它那么容易,我会喜欢它;-)
  • 好的,既然你已经更新了你的问题,你所缺少的是你必须调用mysql_query() 来执行查询,而不是调用mysql_fetch_assoc() 从结果中获取行.您可以阅读许多 PHP+MySQL 教程来展示如何做到这一点。
  • 好的,谢谢!生病看看,看看我能找到什么。我什至不知道要寻找什么哈哈

标签: php html mysql


【解决方案1】:

这到底是什么:

<?php SELECT teacher, count(teacher) 
  FROM votes 
 GROUP by teacher ?>

就 PHP 而言,这是纯文本而不是 MySQL 查询。很快我就想到了,这应该可以向您展示 PHP 和 MySQL 如何相互协作的基本概念。注意mysql_query

$connection = mysql_connect($serverName, $userName, $password) or die('Unable to connect to Database host' . mysql_error());
$dbselect = mysql_select_db($dbname, $connection) or die("Unable to select database:$dbname" . mysql_error());
$result = mysql_query("SELECT teacher, count(teacher) as teacher_count FROM votes GROUP by teacher;");

while ($row = mysql_fetch_assoc($result)) {
    echo $row['teacher'];
    echo $row['teacher_count'];
}

也就是说,mysql_* 前缀的 PHP 函数已被贬值。这意味着它们将不再适用于即将发布的 PHP 版本。所以这是您的代码版本,使用mysqli_* 而不是using examples from the official PHP documentation

$link = mysqli_connect($serverName, $userName, $password, $dbname);

// Check the connection
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

// Select queries return a resultset
if ($result = mysqli_query($link, "SELECT teacher, count(teacher) as teacher_count FROM votes GROUP by teacher;")) {
    // This is optional. Feel free to comment out this line.
    printf("Select returned %d rows.\n", mysqli_num_rows($result));

    // Cycle through results
    while ($row = $result->fetch_object()){
        echo $row['teacher'];
        echo $row['teacher_count'];
    }
}

【讨论】:

  • 哈哈我不知道,我在另一个论坛上看到有人出于类似目的向其他人推荐了它……我只是把它扔进去,希望它可能会产生什么结果。它一定是为了一个完全不同的环境或什么
  • OP 应该使用mysqli_*PDO,因为mysql_*deprecated as of PHP 5.5
  • @Sam 确实你是对的。我使用mysql_* 函数来简化原始发布者对问题的理解。刚刚编辑添加 mysqli_* 等价物。
  • 很公平,已 +1 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-18
相关资源
最近更新 更多