netfeedMedlem sedan mars 2001516 inlägg
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>
")
LAMPMedlem sedan mars 2002729 inlägg
Om jag fattade dig rätt?
$resultTopic = pg_exec($conn, "SELECT * FROM myriadForumTopic ORDER BY [b]datumkolumn[/b] DESC;");
LAMPMedlem sedan mars 2002729 inlägg
eller du ville kanske ha den senaste besvarade topicen överst?
netfeedMedlem sedan mars 2001516 inlägg
precis den senaste besvarade forums posten skall vara först
netfeedMedlem sedan mars 2001516 inlägg
problemet är att datumet ligger i myriadForumPost och inte i myriadForumTopic...
LAMPMedlem sedan mars 2002729 inlägg
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.
FuelMedlem sedan okt. 20001 325 inlägg
netfeedMedlem sedan mars 2001516 inlägg
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...
netfeedMedlem sedan mars 2001516 inlägg
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>
LAMPMedlem sedan mars 2002729 inlägg
Oki, hur ser din tabellstruktur ut i databasen?
netfeedMedlem sedan mars 2001516 inlägg
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
LAMPMedlem sedan mars 2002729 inlägg
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 :)
netfeedMedlem sedan mars 2001516 inlägg
tyvärr jag är lessen
fattar nada
LAMPMedlem sedan mars 2002729 inlägg
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!
netfeedMedlem sedan mars 2001516 inlägg
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
LAMPMedlem sedan mars 2002729 inlägg
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?
netfeedMedlem sedan mars 2001516 inlägg
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...
LAMPMedlem sedan mars 2002729 inlägg
Om du har mysql som dbms fungerar inte subquerys har jag för mig.
netfeedMedlem sedan mars 2001516 inlägg
men det har jag inte
använder potsgresql