我查看了现有的主题。我已经解决了我的问题,但我知道它不是正确的解决方案,我更感兴趣的是让这项工作正确,而不是创建一个解决方法。
我有一个项目,我有3个表,诊断,访问和治疗。人们来看望,接受治疗,治疗就是诊断。
为了在页面上显示此信息,我想显示患者的诊断,然后显示他们来访的时间,然后可以点击访问信息以显示治疗信息。
要做到这一点,请在php中创建此函数:
<?
function returnTandV($dxid){
include("db.info.php");
$query = sprintf("SELECT treatments.*,visits.* FROM treatments LEFT JOIN visits ON
treatments.tid = visits.tid WHERE treatments.dxid = '%s' ORDER BY visits.dos DESC",
mysql_real_escape_string($dxid));
$result = mysql_query($query) or die("Failed because: ".mysql_error());
$num = mysql_num_rows($result);
for($i = 0; $i <= $num; ++$i) {
$v[$i] = mysql_fetch_array($result MYSQL_ASSOC);
++$i;
}
return $v;
}
?>
该功能有效,并将显示我想要的内容,即处理和访问的所有行为1个大型关联。数组问题是它总是返回比实际数据库中少一行的行,我不知道为什么。总共有3行,但msql_num_rows()只显示为2.我的工作只是添加1 ($num = mysql_num_rows($result)+1;)
但我宁愿让它正确。
答案 0 :(得分:2)
这部分看起来很可疑:
for($i = 0; $i <= $num; ++$i) {
$v[$i] = mysql_fetch_array($result MYSQL_ASSOC);
++$i;
}
i
两次$i <= $num
$i < $num
醇>
这种组合可能是您获得意外结果的原因。基本上,你有三行,但你只需要第0行和第2行(跳过第1行)。
答案 1 :(得分:0)
程序员总是从0开始计数。所以,你从0开始循环。如果从2结束,你已经达到3行。
Row0,Row1,Row2。
答案 2 :(得分:0)
如果$ i = 0,并且你将它增加 BEFORE 向数组中添加内容,则跳过第一行。增加$ i循环运行后从0(第一个键)开始。
for循环对此不利:而是:
$query=mysql_query(' --mysql --- ');
while ($row=mysql_fetch_array($query)){
$v[]=$row["dbcolumn"];
}
为你的函数返回$ v then.compact和neat。你可以创建一个关联数组,只要键名是唯一的(如主要ID).. $ v [“$ priid”] = $ row [1];