MySQL

Tags:    php

<< < 12 > >>
Jeg har denne mySQL foresp.:
$mysql2 = mysql_query("SELECT traad_id FROM forum_indlaeg WHERE forum_id = '$row[id]' ORDER BY dato DESC LIMIT 0,3");

Det jeg vil, er at den skal finde de tre nyeste rækker i tabellen "forum_indlaeg" (udfra dato).
En af kolonnerne i tabellen hedder traad_id, og indeholder ID'et på den tråd som forum-indlæget er skrevet til.

Hvis vi så forestiller os, at to af de tre nyeste indlæg er skrevet til den samme forum-tråd, så bliver det samme forum-indlæg printet to gange.. Det er så dette jeg vil forhændre!..

Hvordan kan jeg lave sådan, at den springer rækken over, hvis der er før er blevet printet en række med det "forum_traad" ID?

Jeg håber I forstår hvad mit problem er, ellers så må I lige sige til!

Mvh Dennis Madsen
http://www.demaweb.dk



11 svar postet i denne tråd vises herunder
5 indlæg har modtaget i alt 7 karma
Sorter efter stemmer Sorter efter dato
<pre><?
$antalPrintedThreads = 0;
$acceptedThreadID[];

while ($antalPrintedThreads < 3)
{
$mysql2 = mysql_query("SELECT traad_id FROM forum_indlaeg WHERE forum_id = '$row[id]' ORDER BY dato DESC LIMIT 0,3");

while($r = mysql_fetch_array($mysql2))
{
$traad_id = $r["navn"];

if (in_array($traad_id, $acceptedThreadID) == false)
{
$antalPrintedThreads++;
$acceptedThreadID[] = $traad_id;
echo "Tråd-id'et er: $traad_id<br/>";
}
}
}
?></pre>

Ref: http://www.php.net/manual/en/function.in-array.php

Det er IKKE testet! Jeg ved ikke, om det er på den måde du mener?

mikl-dk | ICQ: 159096501 | MSN: mikl@mikl.dk



Jeg har laget flere forum selv og slet med det problemet. hvis du har en tabell kalt forum_emner eller noe lignende kan du legge inn en kolonne kalt siste_post eller lignende. Der kan du bruke dato formatet time();. Da vil den ikke hente ut samme emnet flere ganger..



Kan du ikke bare skrive "ORDER BY id" i stedet for "ORDER BY dato" så kommer de nyeste jo først...

Hilsen Morten



Det mest simple er nok at registrere en variabel med navnet på de tråd id du viser.. du siger feltet hedder "traad_id" ? så hvis du har skrevet noget ala:

$row = mysql_fetch_array ($query);

så er det bare at sætte $$row[traad_id] = 1;

MEN... så skal du fjerne din limit fra din sql forespørgsel og lave noget med PHP...

Jeg ved at man kan lave noget i SQL, prøv at kigge på GROUP BY på mysql.com, jeg mener at denne burde kunne gøre noget for dig, ellers må en anden lige hjælpe dig :)


--
Ronni Egeriis - http://acranet.biz/ege/ - En skør skør verden!



Her er en artikel om sortering: http://www.webcafe.dk/artikler/sql/sortering/

Håber der er noget du kan bruge.

- FreaK aka Marco

--
Learn to live with it, or die with it...



Mikkel >>

Ja, jeg tror du har forstået mig.. Men findes der ikke en smartere metode? F.eks. et eller andet man kan indsætte i sin mySQL foresp... Altså bare en enkelt kommendo?



De har det også her på udvikleren:

http://www.udvikleren.dk/

Som I kan se der, så vises der de seneste indlæg, og også der kommer det samme indlæg ikke flere gange!



Prøv at læs den artikel jeg har skrevet:
http://www.udvikleren.dk/show_article.php?id=103

Tror måske, at din databasestruktur ikke er optimal.

mikl-dk | ICQ: 159096501 | MSN: mikl@mikl.dk



Jeg fandt selv ud af det:

$mysql2 = mysql_query("SELECT traad_id,max(dato) as sortid FROM forum_indlaeg WHERE forum_id = '$row[id]' GROUP BY traad_id ORDER BY sortid DESC LIMIT 0,3");

Hvad skal jeg gøre med mine point i denne tråd?



Hvad skal jeg gøre med mine point i denne tråd?


Du kan jo bare skrive et svar til dig selv og så give dig selv pointene? :)
http://www.ahitt.tk <- tjeck den ud :)



<< < 12 > >>
t