Avatar billede supermand69 Nybegynder
13. august 2004 - 14:54 Der er 2 kommentarer og
1 løsning

avanceret left join

Jeg er ved at lave et debat forum...

http://www.elektrobeat.dk/test/debate.php
email: test@test.dk
pass: 123

Den tråd med det seneste indlæg skulle gerne blive vist øverst, men det er ikke altid det sker? Hvis man laver et indlæg direkte på det indlæg der starter en tråd gør den det godt nok, men svarer man længere "inde" i tråden sker der ikke noget??

SELECT debate.id, debate.subject, debate.time, COUNT(debate2.reply_id) AS replies, user.name, IFNULL(MAX(debate2.time), debate.time) AS last_time
FROM ($DB.$table debate LEFT JOIN $DB.user user ON debate.user_id=user.id)
LEFT JOIN $DB.$table debate2 ON debate.id=debate2.reply_id
WHERE debate.reply_id=0
GROUP BY debate.thread_id
ORDER BY last_time DESC

thread_id = id på det indlæg som starter tråden
reply_id = id på det indlæg som bliver svaret på
Avatar billede supermand69 Nybegynder
18. august 2004 - 12:19 #1
ingen som kan hjælpe?? eller skal I have mere kode?

I kan også bare selv prøve at lave nogle nye tråde eller indlæg, så man kan se hvad jeg mener
Avatar billede supermand69 Nybegynder
18. august 2004 - 12:58 #2
her er min kode:

<?
function thread($reply_id, $table)
{
    global $DB, $NO_USER, $threads;
   
    $i = 1;
   
    $sql = "SELECT debate.id, debate.thread_id, debate.subject, debate.time, COUNT(debate2.reply_id) AS replies, user.name
        FROM ($DB.$table debate LEFT JOIN $DB.user user ON debate.user_id=user.id)
        LEFT JOIN $DB.$table debate2 ON debate.id=debate2.reply_id
        WHERE debate.reply_id=$reply_id
        GROUP BY debate.id
        ORDER BY debate.time DESC";
    $get = mysql_query($sql);
    $num = mysql_num_rows($get);
    while($row = mysql_fetch_array($get))
    {
        if(!$row['name']) $row['name'] = $NO_USER;
        else $row['name'] = $row['name'];
?>
<table>
  <tr valign="top">
<?
    if($row['replies'])
    {
        if($num == $i) echo '<td><a href="java script:thread_expand('.$row['id'].');"><img id="img'.$row['id'].'" src="gfx/debate_thread_close.gif"></a>';
        else echo '<td style="background:url(\'gfx/debate_thread_bg.gif\');"><a href="java script:thread_expand('.$row['id'].');"><img id="img'.$row['id'].'" src="gfx/debate_thread_close.gif"></a>';
       
        $threads .= ','.$row['id'];
    }
    else
    {
        if($num == $i) echo '<td><img src="gfx/debate_thread_end.gif">';
        else echo '<td style="background:url(\'gfx/debate_thread_bg.gif\');"><img src="gfx/debate_thread.gif">';
    }
?>
    </td>
    <td>
      <table>
        <tr valign="top">
          <td id="td<?=$row['id']?>"><img src="gfx/debate_msg.gif"></td>
          <td style="padding-bottom:5px;">
          <a href="iframe.debate_contribution.php?topic=<?=$_GET['tab']?>&thread=<?=$row['id']?>" target="debate_contribution" onclick="document.getElementById('div_debate_contribution').style.display = 'block'; write_to_div('div_debate_contribution', initHTML);" class="thread"><?=sql2txt($row['subject'], 0)?></a><br>
          <?=time2date($row['time'], 1)?> - <?=$row['name']?></td>
        </tr>
      </table>
    </td>
  </tr>
  <tr>
<?
    if($num != $i) echo '<td style="background:url(\'gfx/debate_thread_bg.gif\');">';
    else echo '<td>';
?>
    </td>
    <td colspan="2">
      <div id="div<?=$row['id']?>" style="display:none;">
<?
    thread($row['id'], $table);
?>
      </div>
    </td>
  </tr>
</table>
<?
        $i++;
    }
}

$sql = "SELECT debate.id, debate.subject, debate.time, COUNT(debate2.reply_id) AS replies, user.name, IFNULL(MAX(debate2.time), debate.time) AS last_time
    FROM ($DB.$table debate LEFT JOIN $DB.user user ON debate.user_id=user.id)
    LEFT JOIN $DB.$table debate2 ON debate.id=debate2.reply_id
    WHERE debate.reply_id=0
    GROUP BY debate.thread_id
    ORDER BY last_time DESC";
$get = mysql_query($sql);
if(mysql_num_rows($get))
{
    while($row = mysql_fetch_array($get))
    {
        if(!$row['name']) $row['name'] = $NO_USER;
        else $row['name'] = $row['name'];
       
        $get2 = mysql_query("SELECT COUNT(id) FROM $DB.$table WHERE thread_id=$row[id]");
        $row2 = mysql_fetch_array($get2);
        $replies_all = $row2[0] - 1;
?>
<table>
  <tr valign="top">
    <td style="background:url('gfx/debate_thread_bg.gif');">
<?
        if($row['replies'])
        {
            echo '<a href="java script:thread_expand('.$row['id'].');"><img id="img'.$row['id'].'" src="gfx/debate_thread_close.gif"></a>';
            $threads = $row['id'];
        }
        else echo '<img src="gfx/debate_thread.gif">';
?>
    </td>
    <td>
      <table>
        <tr valign="top">
          <td id="td<?=$row['id']?>"><img src="gfx/debate_msg.gif"></td>
          <td style="padding-bottom:5px;"><a href="iframe.debate_contribution.php?topic=<?=$_GET['tab']?>&thread=<?=$row['id']?>" target="debate_contribution" onclick="document.getElementById('div_debate_contribution').style.display = 'block'; write_to_div('div_debate_contribution', initHTML);" class="thread"><?=sql2txt($row['subject'], 0)?></a><br>
          <?=time2date($row['time'], 1)?> - <?=$row['name']?><br>
<?
        if($replies_all)
        {
?>
          <a href="java script:threads(<?=$row['id']?>, 1);">Åbn</a> | <a href="java script:threads(<?=$row['id']?>, 0);">Luk</a> - <?=$replies_all?> indlæg<br>
          Seneste indlæg: <?=time2date($row['last_time'], 1)?>
<?
        }
?>
          </td>
        </tr>
      </table>
    </td>
  </tr>
  <tr>
    <td style="background:url('gfx/debate_thread_bg.gif');"></td>
    <td colspan="2">
      <div id="div<?=$row['id']?>" style="display:none;">
<?
        thread($row['id'], $table);
?>
      </div>
    </td>
  </tr>
</table>
<?
        if($threads)
        {
            if(count(explode(',', $threads)) > 1) echo '<script type="text/javascript">thread_arr['.$row['id'].'] = new Array('.$threads.');</script>';
            else echo '<script type="text/javascript">thread_arr['.$row['id'].'] = new Array(); thread_arr['.$row['id'].'][thread_arr['.$row['id'].'].length] = '.$threads.';</script>';
        }
       
        unset($threads);
    }
}
else echo 'Ingen tråde...';
?>
Avatar billede supermand69 Nybegynder
19. august 2004 - 16:50 #3
har fundet fejlen :)

SELECT debate.id, debate.subject, debate.time, COUNT(debate2.reply_id) AS replies, user.name, IFNULL(MAX(debate2.time), debate.time) AS last_time
FROM ($DB.$table debate LEFT JOIN $DB.user user ON debate.user_id=user.id)
LEFT JOIN $DB.$table debate2 ON debate.id=debate2.thread_id && debate2.reply_id!=0
WHERE debate.reply_id=0
GROUP BY debate.thread_id
ORDER BY last_time DESC
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester