Php 使用内部联接和mysql_num_rows()总是少返回一行
我检查了现有的主题。我对我的问题有一个解决方案,但我知道它不是正确的解决方案,我更感兴趣的是使它正常工作,而不是创建一个解决方案 我有一个项目,我有3个表格,诊断,访问和治疗。人们来看病,接受治疗,治疗是为了诊断 为了在页面上显示此信息,我想显示患者的诊断,然后显示他们来就诊的时间,然后单击就诊信息以显示治疗信息 要执行此操作,请在php中创建此函数:Php 使用内部联接和mysql_num_rows()总是少返回一行,php,left-join,mysql-num-rows,Php,Left Join,Mysql Num Rows,我检查了现有的主题。我对我的问题有一个解决方案,但我知道它不是正确的解决方案,我更感兴趣的是使它正常工作,而不是创建一个解决方案 我有一个项目,我有3个表格,诊断,访问和治疗。人们来看病,接受治疗,治疗是为了诊断 为了在页面上显示此信息,我想显示患者的诊断,然后显示他们来就诊的时间,然后单击就诊信息以显示治疗信息 要执行此操作,请在php中创建此函数: <? function returnTandV($dxid){ include("db.info.php"); $que
<?
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;
}
?>
程序员总是从0开始计数。因此,您将从0开始循环。如果以2结束,则已到达3行
第0行,第1行,第2行。我觉得这个部分很可疑:
for($i = 0; $i <= $num; ++$i) {
$v[$i] = mysql_fetch_array($result MYSQL_ASSOC);
++$i;
}
对于($i=0;$i如果$i=0,并且在向数组添加内容之前,u递增它,u跳过第一行。在循环运行后递增$i,从0开始(第一个键)
For循环不利于此:相反,请执行以下操作:
$query=mysql_query(' --mysql --- ');
while ($row=mysql_fetch_array($query)){
$v[]=$row["dbcolumn"];
}
然后为您的函数返回$v。紧凑整洁。您可以创建一个关联数组,只要键名是唯一的(如主ID)$v[“$priid”]=$row[1]如果您将代码格式化为易于阅读的格式,人们将能够更快地回答您的问题。另一方面,如果您只是在学习PHP,您应该是,而不是旧的已损坏的mysql
函数。谢谢大家,我在for循环中有++$I,甚至没有在那里看到它,整个时间我都看不见它。谢谢catching it.它现在可以工作了。新函数对我来说是新闻,我不知道它们,谢谢链接。这是一个示例,说明了格式化代码是多么重要。一旦正常格式化for
循环,额外的++I
非常明显。这是不正确的。他们使用的循环将正确地获取第一行,但它跳过了第二个。