数组不显示所有结果

时间:2012-01-23 22:26:29

标签: php mysql left-join

这也许是我在其他方面遇到问题的原因,但输出该区域的原因是 m_id 给出了空的结果。它多次使用的字段并正确显示所有其他字段的数据,但使用的主字段 m_id 未显示其ID号。

$res = mysql_query("SELECT *, DATE_FORMAT(sm.m_lld,'%m/%d/%y') 
                    AS m_lld_formatted 
                    FROM social_members sm
                    JOIN social_meminfo smi ON (sm.m_id = smi.m_id)
                    LEFT OUTER JOIN social_memtext smt ON (sm.m_id = smt.m_id)
                    WHERE sm.m_user = '".mysql_real_escape_string($en['user'])."'");            
if (mysql_num_rows($res) == 0) call404();
$line = mysql_fetch_assoc($res);
foreach ($line as $key => $value) {
        $en['m'.$key] = str_replace("\n",'<br/>',stripslashes($value));
        }

echo '<pre>'; print_r($line); echo '</pre>';
echo $en['mm_id'];

好吧,我想我知道发生了什么。当我为social_memtext执行LEFT OUTER JOIN时,如果该表没有找到m_id的结果,则它不会显示m_id的值,即使它存在于其他两个表中。反正有没有解决这个问题?在查找时,m_id将始终在social_members和_meminfo中具有值/行

1 个答案:

答案 0 :(得分:1)

来自:http://php.net/manual/en/function.mysql-fetch-assoc.php

如果结果的两列或更多列具有相同的字段名称,则最后一列将优先。

您正在选择3个联接中的所有内容,并且每个表m_id中的名称都相同。 这意味着结果集中有3个m_id,最后一个来自左连接表social_memtext,如果该表中没有给定m_id的相应行,则该值为NULL。

要获得预期的m_id,请在SELECT中添加别名,并在php中使用该别名作为数组索引。

SELECT *, DATE_FORMAT(sm.m_lld,'%m/%d/%y') 
                AS m_lld_formatted,
          sm.m_id as mem_id
...