#1 ivanlai
求jake 或者其他大神 帮忙看看问题!先说说背景情况吧!
为了学习PHP,已经Speedphp,就打算写一个同事之间请客吃饭的一个记录程序!
一共有4张表,
mysql> show tables;
+----------------------+
| mangroup //被请吃饭的人员组合
| people //人员信息
| restaurant //吃饭的地点信息
| watermain //总的流水账
+----------------------+
使用mysql的查询语句如下:
select watermain.autoid,watermain.dinnerdate,people.name,mangroup.member, watermain.howmuch,restaurant.name,watermain.detail from watermain,people,mangroup,restaurant where (watermain.cheersman=people.autoid) and (watermain.persongroup=mangroup.autoid) and (watermain.dinnerplace=restaurant.id) order by watermain.dinnerdate desc;
结果期望如下:
autoid | dinnerdate | name | member | howmuch | name | detail |
| 29 | 2013-05-30 | 孙琳 | 来+琳+姚 | 75.00 | 面鼎香 | 泡馍+粥+大拌菜
| 28 | 2013-05-29 | 来鹏 | 来+琳+姚 | 78.00 | 面鼎香 | 面+大拌菜
问题1:
我也看了关于1对1,一对多,多对多的关系,但是感觉这个当表很多时,用起来很复杂,对于初学者很痛苦,又没有更好的办法?
问题2:
后来我就决定采用findsql,代码如下
$sql="select watermain.autoid,watermain.dinnerdate,people.name,mangroup.member,
watermain.howmuch,restaurant.name,watermain.detail
from watermain,people,mangroup,restaurant
where (watermain.cheersman=people.autoid)
and (watermain.persongroup=mangroup.autoid)
and (watermain.dinnerplace=restaurant.id) order by watermain.dinnerdate desc";
$watermain = spClass("m_watermain");
$this -> results = $watermain ->findsql($sql);
dump($this -> results);
$this -> display("showall.html");
结果出来的数据和我期望的不同:少了部分的数据
0] => Array ( [autoid] => 29 [dinnerdate] => 2013-05-30 [name] => 面鼎香 [member] => 来+琳+姚 [howmuch] => 75.00 [detail] => 泡馍+粥+大拌菜 ) [1] => Array ( [autoid] => 28 [dinnerdate] => 2013-05-29 [name] => 面鼎香 [member] => 来+琳+姚 [howmuch] => 78.00 [detail] => 面+大拌菜 )导致最后的显示有空值! smarty模板输出
我就找原因,修给了 driver/mysql.php 中的 getarray函数!
去掉了MYSQL_ASSOC while($rows[] = mysql_fetch_array($result)){}
调试的数据如下:
0] => Array ( [0] => 29 [autoid] => 29 [1] => 2013-05-30 [dinnerdate] => 2013-05-30 [2] => 孙琳 [name] => 面鼎香 [3] => 来+琳+姚 [member] => 来+琳+姚 [4] => 75.00 [howmuch] => 75.00 [5] => 面鼎香 [6] => 泡馍+粥+大拌菜 [detail] => 泡馍+粥+大拌菜 )
数组构成的数据是没有问题的,但是字段的就有问题!
所以问题2:为什么输出有问题了,我的程序哪里有问题了,求解答!
问题3:
为什么 while($rows[] = mysql_fetch_array($result,MYSQL_ASSOC)){} 不使用both呢,那样既可以兼容数组,也可以兼容字段,当时是基于什么原因考虑的!性能吗?
2013-06-02 00:53:02