webForumDet fria alternativet

sortera efter senaste datum

PHPur PHP

18 svar · 459 visningar · startad av netfeed

Medlem sedan mars 2001593 inlägg
Frågan#1

jag har följande kod för at skriva ut vilka topics det finns i ett forum.
ni är det så att jag vill ha dem sorterade efter datum men får inte det att funka... datumen läggs till konstigt ch det puckar med hur det skrivs ut...

behövs det mer fakta så kan jag posta det

        <table border=0 width=100%>
          <tbody>
               <tr>
                      <td width=60% class=txtNormalForumHead>
                          <b>Topic</b>
                      </td>
                      <td width=20% class=txtNormalForumHead>
                          <b>Created By</b>
                      </td>
                      <td width=8% class=txtNormalForumHead>
                          <b>Posts</b>
                      </td>
                      <td class=txtNormalForumHead>
                          <b>Last Post</b>
                      </td>
               </tr>
               <?php
               $resultTopic = pg_Exec($conn, "SELECT * FROM myriadForumTopic ORDER BY id DESC;");
               $rows        = pg_NumRows($resultTopic);

               for ( $i=0 ; $i<$rows ; $i++){
                     $id              = pg_Result($resultTopic, $i, id);
                     $resultNick      = pg_Exec($conn, "SELECT * FROM myriadForumPost WHERE myriadForumTopic_id=$id ORDER BY datum;");
                     $resultQuantity  = pg_Exec($conn, "SELECT * FROM myriadForumPost WHERE myriadForumTopic_id=$id ORDER BY datum;");
                     $rowsQuantity    = pg_NumRows($resultQuantity);
                     $topicName       = pg_Result($resultTopic, $i, topic);
                     $userNick        = pg_Result($resultNick,  0,  nick);
                     $resultDatum     = pg_Exec($conn, "SELECT datum FROM myriadForumPost ORDER BY id DESC");
                     $datum           = substr(pg_Result($resultDatum, $i, datum),5,11);
                     ?>
                     <tr>
                            <td class=txtNormalForumPost>
                                <a class=leftLink href="<?php echo "forum.php?event=show&topic=$id"; ?>"><?php echo $topicName; ?></a>
                            </td>
                            <td class=txtNormalForumPost>
                                <a class=leftLink href="<?php echo "user.php?nick=$userNick"; ?>"><?php echo $userNick; ?></a>
                            </td>
                            <td class=txtNormalForumPost>
                                <?php echo $rowsQuantity; ?>
                            </td>
                            <td class=txtNormalForumPost>
                                <?php echo $datum; ?>
                            </td>
                     </tr>
                     <?php
               }

              echo("
              <tr>
                      <td colspan=3 class=txtNormal>
                          | <a href=\"forum.php?event=addTopic\">New Topic</a> |
                      </td>
              </tr>
          </tbody>
        </table>

            ")
Medlem sedan mars 2002777 inlägg
#2

Om jag fattade dig rätt?

$resultTopic = pg_exec($conn, "SELECT * FROM myriadForumTopic ORDER BY [b]datumkolumn[/b] DESC;");
Medlem sedan mars 2002777 inlägg
#3

eller du ville kanske ha den senaste besvarade topicen överst?

Medlem sedan mars 2001593 inlägg
#4

precis den senaste besvarade forums posten skall vara först

Medlem sedan mars 2001593 inlägg
#5

problemet är att datumet ligger i myriadForumPost och inte i myriadForumTopic...

Medlem sedan mars 2002777 inlägg
#6

Gör en kolumn till i tabellen av typen datetime som du uppdaterar med now() när någon svarar på en topic, sedan sorterar du efter den kolumnen.

Medlem sedan okt. 20001 285 inlägg
#7

--- Sorry .. fel ---

Medlem sedan mars 2001593 inlägg
#8

Ursprungligen av LAMP Gör en kolumn till i tabellen av typen datetime som du uppdaterar med now() när någon svarar på en topic, sedan sorterar du efter den kolumnen.

hur menar du?
förstår inte rikitgt...

Medlem sedan mars 2001593 inlägg
#9

uppdatering:

nu ser koden ut så här och jag har fått ut senaste tillfälle nån har svarat men jag kan inte få den att sortera... det är riktigt störande

        <?       $resultTopic = pg_Exec($conn, "SELECT id, topic FROM myriadForumTopic ORDER BY id DESC;");
               $rows        = pg_NumRows($resultTopic);

               for ( $i=0; $i<$rows; $i++){
                     $id              = pg_Result($resultTopic, $i, id);
                     $resultNick      = pg_Exec($conn, "SELECT nick FROM myriadForumPost WHERE myriadForumTopic_id=$id ORDER BY datum;");
                     $rowsQuantity    = pg_NumRows($resultNick);
                     $topicName       = pg_Result($resultTopic, $i, topic);
                     $userNick        = pg_Result($resultNick,  0,  nick);
                     $resultDatum     = pg_Exec($conn, "SELECT datum from myriadforumpost where id=(select max(id) from myriadforumpost WHERE myriadforumtopic_id=$id);");
                     $datum           = substr(pg_Result($resultDatum, 0, datum),5,11);
                     ?>
                     <tr>
                            <td class=txtNormalForumPost>
                                <a class=leftLink href="<?php echo "forum.php?event=show&topic=$id"; ?>"><?php echo $topicName;  ?></a>
                            </td>
                            <td class=txtNormalForumPost>
                                <a class=leftLink href="<?php echo "user.php?nick=$userNick"; ?>"><?php echo $userNick; ?></a>
                            </td>

                            <td class=txtNormalForumPost>
                                <?php echo $rowsQuantity; ?>
                            </td>
                            <td class=txtNormalForumPost>
                                <?php echo $datum; ?>
                            </td>
                     </tr>
Medlem sedan mars 2002777 inlägg
#10

Oki, hur ser din tabellstruktur ut i databasen?

Medlem sedan mars 2001593 inlägg
#11

myriadforumtopic:
Attribute | Type | Modifier
-----------+-------------+-----------------------------------------------------------
category | varchar(40) |
topic | varchar(40) |
id | integer | not null default nextval('myriadforumtopic_id_seq'::text)
Index: myriadforumtopic_pkey

myriad forumpost:
Attribute | Type | Modifier
---------------------+-------------+----------------------------------------------------------
nick | varchar(16) |
message | text |
myriadforumtopic_id | integer |
datum | timestamp | default 'now'
id | integer | not null default nextval('myriadforumpost_id_seq'::text)
Index: myriadforumpost_pkey

Medlem sedan mars 2002777 inlägg
#12

myriadforumtopic:
Attribute | Type | Modifier
-----------+-------------+-----------------------------------------------------------
category | varchar(40) |
topic | varchar(40) |
id | integer | not null default nextval('myriadforumtopic_id_seq'::text)
Index: myriadforumtopic_pkey
dteDate | dateTime

----------------------------------------------

// uppdatera fältet dteDate med now() där någon gjort ett inlägg  
// eller ett svar under en viss topic. 

if ($id) {
$strSQL ="UPDATE myriadforumtopic SET dteDate = Now() WHERE id = $id";
$result = mysql_query($strSQL);
{
SELECT * FROM myriadforumtopic ORDER BY dteDate DESC

Hoppas du förstår hur jag menar, fråga annars igen :)

Medlem sedan mars 2001593 inlägg
#13

tyvärr jag är lessen
fattar nada

Medlem sedan mars 2002777 inlägg
#14

Okey, vi tar det grundligt en sista gång. ;)

Om jag förstår frågan rätt har du en tabell med topics (ämnesrubriker) som du vill lista efter senast gjorda topic eller om svar finns, senast besvarade topic överst. (precis som här på wF)

Skapa en ny kolumn med lämpligt namn (förslagsvis dteLastUpdate) i formatet datetime (not null). När någon skapar en ny ämnesrubrik skickar du med värdet Now() till kolumnen dteLastUpdate i din INSERT. Nu har du en etikett som visar när det senast var aktivitet i topicen. Om det nu är så att någon svarar på topicen uppdaterar du dteLastUpdate med värdet Now(). Alltså har du ändrat senaste aktivitet till exakt datum och tid i aktuell topic.

Sedan vill du lista alla topics med den senast inlagda eller besvarade topicen överst. Då hämtar du som vanligt med SELECT och sorterar (ORDER BY) efter kolumnen dteLastUpdate och då med senast överst (DESC).

Lycka till!

Medlem sedan mars 2001593 inlägg
#15

då fattar jag
men nu är det så här att jag inte kan lägga till en ny kolummn :(
hur gör man i sådan fall?

lägger jag till en till så blir det redundans

Medlem sedan mars 2002777 inlägg
#16

Om jag fattat din dbstruktur rätt så har du nog inget val. I access och sql-server har jag för mig man kan plocka ut det med en subselect eller något i den stilen. Men tyvärr saknar mysql sådana funktioner undantaget de absolut senaste versionerna.

Det är kanske någon annan som har en annan lösning?

Medlem sedan mars 2001593 inlägg
#17

jag har kommit på en lösning men får den inte att funka
man kan skapa en virtuel tabell mha "as" typ:

 $selectTest  = pg_Exec($conn, "SELECT id as id, topic as topic, (SELECT datum from myriadforumpost where id=(select max(id) from myriadforumpost WHERE myriadforumtopic_id=$id)) as datum FROM myriadForumTopic ORDER BY datum DESC;");

men det är så att jag inte kommer åt $id därför att den ligger utanför i for slingan

alltså den här koden skall ligga där den första $resultTopic ligger...

Medlem sedan mars 2002777 inlägg
#18

Om du har mysql som dbms fungerar inte subquerys har jag för mig.

Medlem sedan mars 2001593 inlägg
#19

men det har jag inte
använder potsgresql

136 ms totalt · 3 externa anrop · v20260731065814-full.4bcf49fe
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)