免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 7643 | 回复: 15
打印 上一主题 下一主题

mysql查询语句+count函数,为什么没有结果? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-02-17 16:09 |只看该作者 |正序浏览
Hello All:

很奇怪的问题,一个简单的学生选课系统,表是选课表,记录学生选课情况,结构如下:

  1. mysql> describe selected;
  2. +-------------+-------------+------+-----+---------+-------+
  3. | Field       | Type        | Null | Key | Default | Extra |
  4. +-------------+-------------+------+-----+---------+-------+
  5. | Stu_name    | varchar(50) |      |     |         |       |
  6. | Stu_id      | varchar(50) |      | PRI |         |       |
  7. | Dept        | varchar(50) | YES  |     | NULL    |       |
  8. | Class       | varchar(50) | YES  |     | NULL    |       |
  9. | Major       | varchar(50) | YES  |     | NULL    |       |
  10. | Course_name | varchar(50) | YES  |     | NULL    |       |
  11. | Course_id   | varchar(50) |      | PRI |         |       |
  12. +-------------+-------------+------+-----+---------+-------+
复制代码


现在通过如下语句查询,每门课程的选择人数:
  1. $query = "Select count(*) as stu_num from selected where Course_id='id'";
复制代码

id是之前查询出的课程号,这个值经过打印,看到是正确的,并且表中有相应的记录。

现在问题是:如果在页面上查询的话,不能得到stu_num的值,而通过mysql>命令行下输入:
  1. mysql>"Select count(*) as stu_num from selected where Course_id='1'";
复制代码
就可以正确得到stu_num的值。[/code]

实在是想不通为什么,请各位帮忙看看,小弟拜谢!

[ 本帖最后由 NewCore 于 2009-2-17 16:10 编辑 ]

论坛徽章:
0
16 [报告]
发表于 2009-02-22 12:09 |只看该作者

回复 #15 HonestQiao 的帖子

1、这个我试过了,在MySQL命令行下是可以正常查询出结果的,以课程号1为例:
mysql> Select count(*) as stu_num from selected where Course_id='1';
+---------+
| stu_num |
+---------+
|       1 |
+---------+
1 row in set (0.01 sec)

2、用mysql_num_rows可以!!!

3、用count的话,放到循环外面去获取选课人数还是不行。

看来还是count使用不当地问题?不过多些斑竹,总算有一个可以解决的办法了。

论坛徽章:
1
技术图书徽章
日期:2013-12-05 23:25:45
15 [报告]
发表于 2009-02-22 10:10 |只看该作者
能不能先来点简单的测试(我人笨,简单点好用):
1. 把你的语句在mysql命令窗口输入,结果如何?
2. 先不用count,再结合mysql_num_rows,看看得到的结果如何呢?
3. 附加的,先去掉循环,直接操作,再var_dump打印上一步的结果。因为mysql的查询啊,一步出错,满盘皆错啊!

论坛徽章:
0
14 [报告]
发表于 2009-02-22 09:20 |只看该作者

回复 #13 wildlily980 的帖子

stu_num的值在select返回后就会取得了,这是因为在select语句中“as stu_num”得到的,其他地方都是这样做的,我实在想不通为什么这个地方会有问题。

  1. for($i=0;$i<$dd;$i++) {
  2.         $row = mysql_fetch_array($result);
  3.         
  4.         /* Get student number of each course */
  5.         //$query = "Select count(*) as stu_num from selected where Course_id='$row[Course_id]'";
  6.         //$query = "Select count(*) as stu_num from selected where Course_id=".$row['Course_id'];
  7.         $query = "Select count(*) as stu_num from selected where Course_id='{$row['Course_id']}'";
  8.         $res = mysql_query($query) or die("Invalid query: "   .   mysql_error());
  9.         /********************************************************/
  10.         echo $query, "\n", $row['Course_id'], "\n", $res['stu_num'], "\n", "xxx
  11.         /********************************************************/
  12.         echo "<tr bgcolor=\"#CCFF99\"><td>".$row["Course_id"]."</td><td>".$row["Course_name"]." </td><td>".$row["Teacher_name"]. "</td><td>".$row["Course_time"]."</td><td>".$row["Course_place"]."</td><td>".$row["Credit"]."</td><td>".$stu_num."</td><td><a href=\"delete.php?courseid=".$row["Course_id"]."\">&sup3;·&Iuml;&ucirc;</a></td></tr>";
  13.     }
复制代码


修改过的部分如上所示,还是没有值。页面显示如下:
  1. Select count(*) as stu_num from selected where Course_id='1' 1 xxx
  2. Select count(*) as stu_num from selected where Course_id='3' 3 xxx
  3. Select count(*) as stu_num from selected where Course_id='2' 2 xxx
复制代码

[ 本帖最后由 NewCore 于 2009-2-22 09:22 编辑 ]

论坛徽章:
0
13 [报告]
发表于 2009-02-21 18:30 |只看该作者
那你的$stu_num变量又是从哪里来的值呢?
改成这样:
$res=...
$stu_num_row=mysql_fetch_array($res);
echo $stu_num_row['stu_num'];

论坛徽章:
0
12 [报告]
发表于 2009-02-21 12:09 |只看该作者

回复 #11 wildlily980 的帖子

大哥,$result和$res本来就是不一样的!!!

$result是前面查询的结果,包括查询到的所有课程编号。这里用查询到的课程编号再去查每门课程的选课人数;
$res是查询选课人数时的返回值,在这里应该没有什么作用!

[ 本帖最后由 NewCore 于 2009-2-21 12:11 编辑 ]

论坛徽章:
0
11 [报告]
发表于 2009-02-20 20:54 |只看该作者
$row = mysql_fetch_array($result);
.....
$res = mysql_query($query) or die("Invalid query: "   .   mysql_error());

两个错误,一个是$result,一个是$res
先后次序也应该颠倒一下.

论坛徽章:
0
10 [报告]
发表于 2009-02-19 15:02 |只看该作者
这里完整的代码如下:

  1. for($i=0;$i<$dd;$i++) {
  2.         $row = mysql_fetch_array($result);

  3.         /* Get student number of each course */
  4.         //$query = "Select count(*) as stu_num from selected where Course_id='$row[Course_id]'";
  5.         //$query = "Select count(*) as stu_num from selected where Course_id=".$row['Course_id'];
  6.         $query = "Select count(*) as stu_num from selected where Course_id='{$row['Course_id']}'";
  7.         $res = mysql_query($query) or die("Invalid query: "   .   mysql_error());
  8.         echo $query, "\n", $row['Course_id'], "\n", $stu_num, "\n", "xxx";

  9.         echo "<tr bgcolor=\"#CCFF99\"><td>".$row["Course_id"]."</td><td>".$row["Course_name"]." </td><td>".$row["Teacher_name"]. "</td><td>".$row["Course_time"]."</td><td>".$row["Course_place"]."</td><td>".$row["Credit"]."</td><td>".$stu_num."</td><td><a href=\"delete.php?courseid=".$row["Course_id"]."\">&sup3;·&Iuml;&ucirc;</a></td></tr>";
  10.     }
复制代码


我之前也用echo打印了,但是也没看出错误来呀。

修改过后在页面上打印内容如下:

  1. Select count(*) as stu_num from selected where Course_id='1' 1 xxx
  2. Select count(*) as stu_num from selected where Course_id='3' 3 xxx
  3. Select count(*) as stu_num from selected where Course_id='2' 2 xxx
复制代码


有点奇怪!

论坛徽章:
0
9 [报告]
发表于 2009-02-19 14:49 |只看该作者

回复 #8 kukat 的帖子

$query的信息我倒是打印了,但是对这个不是很熟,也许是出错了也没看出来。

我先试试。

[ 本帖最后由 NewCore 于 2009-2-19 14:52 编辑 ]

论坛徽章:
0
8 [报告]
发表于 2009-02-19 14:40 |只看该作者
遇到这种问题调试起来很简单
echo $query;
看看哪错了
  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP