Gå til innhold

Anbefalte innlegg

Hvordan får jeg skrevet ut thread, title og author når jeg skal velge DISTINCT på thread. Jeg klarer ikke ha det slik som under, og hvis jeg fjerner title og author, skrives kun thread ut...

 

$sql = "SELECT DISTINCT thread, title, author FROM forumet ORDER BY id DESC"; 

 

Noen som vet?

Endret av Vonbo
Lenke til kommentar
Videoannonse
Annonse

$sql = "SELECT DISTINCT thread, title, author FROM forumet ORDER BY id DESC";  	
$tabell = mysql_query($sql);                           

while($rad = mysql_fetch_assoc($tabell)) {            
$nr = $rad['thread'];
$tilsvar = "true";
?>
 <table border=0>
 	<tr>
   <td><? echo $rad['thread']; ?><a href="forum.php?thread=<%=$nr%>"><? echo $rad['title']; ?></a></td>
   <td>Lagt inn av: <? echo $rad['author']; ?></td>
 	</tr>
 </table>

<?
}

 

Skal altså ha ut thread, title og author, men skal bare av hvert tread(nummer).

Lenke til kommentar

Eksemplet ditt gir ihvertfall feilfeilmelding fordi du sorterer på id og da må id være med i select delen.

 

select distinct id, thread, title, author from forumet order by id

eller

select distinct thread, title, author from forumet

 

bør fungere :)

 

mvh,

 

Ove

Lenke til kommentar

Kan du ha mer enn en author og title pr thread? Dersom du kan det, er egentlig det du prøver å oppnå meningsløst.. (Hvordan skal i så fall databasen vite hvilken author og title du vil ha pr thread?) Hvis du bare har en author og title pr thread, burde på den annen side den queryen du først satt opp funke.

 

M.

 

Edit: Til Ove, behøver å ha med i select noe som du skal sortere på? Det funker i hvert fall fint uten både i postgres og sybase.

Endret av mysjkin
Lenke til kommentar

Jeg trodde at hvis jeg kunne ha det slik at den første thread med f.eks nr 12 ble skrevet ut, droppte den å skrive ut 12 etterpå. Må da gå an å få til at tabellen ikke skriver ut duplikater, men bare en av hver, og da den første?

 

Sikkert mange måter å gjøre dette på, så bare si fra. Men ønsker å få til dette.

 

Greia er at når noen starter en tråd opprettes et såkalt threadnr. Hvis noen svarer på innlegget skal threadnr bli samme som den opprinnelige tråden. Dette går greit dersom jeg kunne fått til å bare skrive ut den første av hvert threadnr....

Lenke til kommentar
Det kan virke som funksjonen du søker er GROUP BY thread, hvis ikke hadde det vært en fordel dersom du eksemplifiserte hva du ville hente ut av databasen.

Slik jeg har forstått det så dreier dette seg om en database for et diskusjonsforum. Det han/hun ønsker å oppnå med spørringen er å returnere en rad pr. innlegg i en tråd, men at thread-id kun skal vises i første rad. Dette finnes det ikke noe sql-statement som kan gjøre, og derfor har jeg svart at det må gjøres programmatisk.

Lenke til kommentar

OK, så det du ville ha er

Thread  Author Title
374790  Vonbo  Trådstard
            OveM   Gi et utsnitt
            Vonbo  php-kode
Etc. 

?

 

Enig med Kaffenils og ????????, det der er noe for php og ikke for sql (i hvert fall ikke for distinct) Burde gå an å få det til med noen subqueries og bruk av union (finnes det i MySQL nå?), men det ville vel helst vært som en eksamensoppgave i avansert SQL og ikke noe man ville ha brukt i praksis ;)

 

M.

Endret av mysjkin
Lenke til kommentar
Kan du ha mer enn en author og title pr thread? Dersom du kan det, er egentlig det du prøver å oppnå meningsløst.. (Hvordan skal i så fall databasen vite hvilken author og title du vil ha pr thread?) Hvis du bare har en author og title pr thread, burde på den annen side den queryen du først satt opp funke.

 

M.

 

Edit: Til Ove, behøver å ha med i select noe som du skal sortere på? Det funker i hvert fall fint uten både i postgres og sybase.

Dersom du bruker 'Distinct' må feltet du sorterer på være med i 'Select' - ihvertfall med QueryAnalyzer og mssql :)

 

mvh

Ove

Endret av OveM
Lenke til kommentar
OK, så det du ville ha er

Thread  Author Title
374790  Vonbo  Trådstard
            OveM   Gi et utsnitt
            Vonbo  php-kode
Etc. 

?

 

Enig med Kaffenils og ????????, det der er noe for php og ikke for sql (i hvert fall ikke for distinct) Burde gå an å få det til med noen subqueries og bruk av union (finnes det i MySQL nå?), men det ville vel helst vært som en eksamensoppgave i avansert SQL og ikke noe man ville ha brukt i praksis ;)

 

M.

Denne sql-koden forutsetter en id kolonne med heltall.

 

select 
[traad] = 
 case 
 when
 	( 
   ((select count([sub].[thread]) from [forumet] [sub] where [sub].[thread] = [forum].[thread]) > 1 )
   and 
   ((select top 1 [sub].[id] from [forumet] [sub] where [sub].[thread] = [forum].[thread]) <> [forum].[id])
 	)
 then ''
 else [forum].[thread]
 end,
[forum].[author], 
[forum].[title]
from 
[forumet] as [forum]
order by 
[forum].[thread], 
[forum].[id]

 

Logikken fungerer slik at dersom det er flere en et innlegg i tråden OG innlegget ikke er det første, så skal trådnummer slettes (gi en tom tekststreng).

Bruker da to sub-spørringer for å blanke dublikate trådnumre.

 

mvh,

 

Ove

Endret av OveM
Lenke til kommentar

Hei, Vonbo! Du ble bedt om å legge ut utsnitt av tabellen, og da ga du utsnitt av HTML kode for å vise data i browseren i tabellform. Det database folk kaller for tabell er som regel datasett - inhold i SQL tabellen. Det å vite hva slags data du har i tabellen er kritisk i dette tilfellet.

 

Så jeg har følgende spørsmål:

1. Hvem er author? Trådstarter eller forfatter av ett innlegg?

2. Hva er du ute etter? Alle tråd på forumet, med nummer, tittel og trådstarter? Eller siste innlegg i tråden, med både trådstarter og forfatter av siste innlegg?

 

Så jeg kan bare gjette at hvert innlegg ligger i tabellen og at det er forfatter av hver linje som ligger i author feltet. I tillegg har tabellen et autoincrement (eller tilsvarende) felt som heter id og som numererer linjene. Videre gjetter jeg at du ønsker å skrive ut alle tråd i tabellen med nr (som ligger i feltet som heter thread), trådstarter og tittel.

 

Hvis det er tilfelle, må jeg dessverre skuffe deg. Dette er ikke noe du kan gjøre med 1 pen SQL, du må ha flere.

 

Første SQL:

select min(id) from forumet
group by thread

returnerer alle id-er som starter en tråd.

 

Nå vet jeg ikke hvordan det er med temporære tabeller i MySQL (de hadde vært best å bruke her), men jeg tror ikke de støttes i MySQL.

 

Så da har du en ganske stygg og treig kode som eneste alternativ:

select thread, title, author from forumet
where id in 
 (select min(id) from forumet
 group by thread)

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...