Vonbo Skrevet 8. februar 2005 Del Skrevet 8. februar 2005 (endret) 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 8. februar 2005 av Vonbo Lenke til kommentar
OveM Skrevet 8. februar 2005 Del Skrevet 8. februar 2005 (endret) Kan du gi et utsnitt av tabellen? Hva ønsker du å returnere egentlig og er title og author alltid det samme for hver thread? Endret 8. februar 2005 av OveM Lenke til kommentar
Vonbo Skrevet 8. februar 2005 Forfatter Del Skrevet 8. februar 2005 $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
OveM Skrevet 8. februar 2005 Del Skrevet 8. februar 2005 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
mysjkin Skrevet 8. februar 2005 Del Skrevet 8. februar 2005 (endret) 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 8. februar 2005 av mysjkin Lenke til kommentar
Vonbo Skrevet 8. februar 2005 Forfatter Del Skrevet 8. februar 2005 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
kaffenils Skrevet 8. februar 2005 Del Skrevet 8. februar 2005 Det du vil gjøre er det programmet ditt, f.eks. et php-script, som må håndtere, og ikke SQL-spørringen. Lenke til kommentar
???????? Skrevet 8. februar 2005 Del Skrevet 8. februar 2005 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. Lenke til kommentar
kaffenils Skrevet 8. februar 2005 Del Skrevet 8. februar 2005 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
???????? Skrevet 9. februar 2005 Del Skrevet 9. februar 2005 Okay, det lar seg løse med subquerys - men så lenge problemet ikke er større enn dette så er det enklest å bare hente ut all dataen som du sier kaffenils. Lenke til kommentar
mysjkin Skrevet 9. februar 2005 Del Skrevet 9. februar 2005 (endret) 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 9. februar 2005 av mysjkin Lenke til kommentar
OveM Skrevet 9. februar 2005 Del Skrevet 9. februar 2005 (endret) 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 9. februar 2005 av OveM Lenke til kommentar
OveM Skrevet 9. februar 2005 Del Skrevet 9. februar 2005 (endret) 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 9. februar 2005 av OveM Lenke til kommentar
DidzisK Skrevet 9. februar 2005 Del Skrevet 9. februar 2005 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
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå