从三重内连接中获得正确的结果

时间:2015-02-16 15:53:47

标签: php mysql arrays

我试图创建一个消息列表,其中包含响应的每条消息上方的响应。 消息表和响应表由外部id连接。 一切都可以保存数据。我想要显示他自己的消息父亲的回应。

它工作正常,直到我尝试在同一个消息父保存两个响应时,它创建另一个消息父与另一个响应而不是同一消息中的两个响应。

这里s

function getFormattedDateTime(dateTimeToFormat) {
    dateTimeToFormat = new Date(dateTimeToFormat);
    var monthOptions = {
        month: 'long', year: 'numeric', day: 'numeric',
        hour: '2-digit', minute: '2-digit'
    };

    return dateTimeToFormat.toLocaleTimeString('en-us', monthOptions);

Sql查询:

$totalMensajesR = mysql_num_rows($numMsgRespuesta);
$totalRows = mysql_num_rows($registroTriple);

  $registroTriple = mysql_query("SELECT 
      mensajes.ID as 'm_ID',
      mensajes.USER_NAME,
      mensajes.CONTENIDO as 'm_CONTENIDO',
      mensajes.FECHA as 'm_FECHA',
      respuestas.ID as 'r_ID',
      respuestas.ID_F as 'r_IDF',
      respuestas.USER_NAME as 'r_USERNAME',
      respuestas.FECHA as 'r_FECHA',
      respuestas.CONTENIDO as 'r_CONTENIDO',
      usuarios.ID_USER as 'u_idUSER',
      usuarios.USER_NAME,
      usuarios.CORREO
      FROM mensajes
        LEFT OUTER JOIN respuestas ON (respuestas.ID_F = mensajes.ID)
        LEFT OUTER JOIN usuarios ON (usuarios.USER_NAME=mensajes.USER_NAME)",$conexion) or die("Problemas en el select:".mysql_error());

我需要展示的内容

if ($totalRows!=0){



    while ($row= mysql_fetch_assoc($registroTriple))
                    {
                        echo "<br />";
                        echo "<div id='$row[m_ID]' class='borderMensajes'>";
                        echo "<form name='formulario' action='' onsubmit='enviarDatos(); return false'>";
                        echo "<img id='imagenUsuario' src='getImageFromUsuarios.php?ID=$row[u_idUSER]'/>";
                        //echo "<span class='divDin2'>Product: </span>";
                        echo "<span class='divDin2'>$row[USER_NAME]</span>";
                        echo "<br/><br/>";
                        echo "<span class='divDinamico'>Mensaje: </span>";
                        echo $row["m_CONTENIDO"];
                        echo "<br/><br/>";
                        echo "<span class='divDinamico'>Fecha: </span>";
                        echo $row['m_FECHA'];
                        echo "<br/>";
                        echo "<h5></h5>";
                        echo "<input class='btRespuesta' id='_botonArchivar' onclick='AddResponse($row[m_ID])' name='responder' type='submit' value='Responder'/>";
                        echo "<div>";
                            //$row =  mysql_fetch_assoc($registroTriple);   

                            if ($row['r_IDF']==$row['m_ID'])
                            {
                                echo $row['r_USERNAME'];
                                echo "<span class='divDinamico'>Mensaje: </span>";
                                echo $row["r_CONTENIDO"];
                                echo "<span class='divDinamico'>Fecha: </span>";
                                echo $row["r_FECHA"];
                            }

                        echo "</div>";      
                        echo "<br /><br />";    
                        echo "</form>";
                        echo "</div>";

                    }
            `

1 个答案:

答案 0 :(得分:0)

我不知道是否理解正确,但我认为......

您拥有的此查询将为您对同一邮件的每个响应生成其他条目   因此,如果Message表上有一行,Response表上有3行,则会得到3行   例子

  Message ID | Response ID |
  1 | 1
  1 | 2
  1 | 3

在你的php输出中,我没有看到任何检测和分组响应的机制,所以每个响应都会显示为另一条消息

我认为您必须将三重连接查询分解为2个查询,一个用于消息,一个用于响应 在循环消息时,您必须调用响应查询以获取响应

while ($row = mysql_fetch_assoc($sqlMessages)) {

    echo 'Message';
    echo displayResponses($row['messageId']);
}

function displayResponses($messageId) {

    while ($row = mysql_fetch_assoc($sqlResponse)) {

        echo $row['response'];
    }
}

我希望这有帮助。