Php 使用内部联接和mysql_num_rows()总是少返回一行

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

我检查了现有的主题。我对我的问题有一个解决方案,但我知道它不是正确的解决方案,我更感兴趣的是使它正常工作,而不是创建一个解决方案

我有一个项目,我有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;
}
?>

程序员总是从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
非常明显。这是不正确的。他们使用的循环将正确地获取第一行,但它跳过了第二个。