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