23. februar 2007 - 11:16Der er
12 kommentarer og 1 løsning
Order by "to forskellige felter i to forskellige tabeller"
Hej Har lavet et debatforum, og på forsiden vil jeg gerne have oplistet de seneste indlæg.
Jeg har lavet udtrækkene som de skal være, men jeg kan kun finde ud af at sortere på eet felt.
SELECT Top 3 debatemne.titel, debatindlaeg.dato, debatindlaeg.ansvarlig, brugere.brugernavn, brugere.fornavn, brugere.efternavn, debatindlaeg.relation FROM debatemne, brugere, debatindlaeg WHERE debatindlaeg.ansvarlig = brugere.brugernavn AND debatindlaeg.relation = debatemne.id ORDER BY debatindlaeg.dato DESC
Dermed ligger de seneste INDLÆG øverst. Kan jeg sortere så den af felterne, oprdato og dato, der har den nyeste dato ligger øverst?
Jeg kunne forestille mig at der skulle en JOIN ind i sætningen, som sammensmelter debatindlaeg.dato og debatemne.oprdato, ellers ville jeg vel få problemer med min repeat, når resultaterne skal listes op.
Nåh ok. er ikke den største haj i skuffen, når det kommer til sql Jeg kan ikke finde det der sql-visning. Hverken under selve tabelvisning eller i oversigtsvinduet. Skal jeg gøre noget specielt for at få det frem? bruger access 2003
Beklager det sene svar - har været i det mørke nord.
To ting, først alternativ, dernæst svar på seneste
ALTERNATIV Kan man oprette et emne uden at lave et indlæg? Bør det ikke altid være sådan, at der til et emne er knyttet et indlæg? I givet fald, kan du jo nøjes med at sortere på dato for indlæg.
SVAR PÅ SENESTE Hvis du står inde på en query (i f.eks. design-view), kan du under menuen 'Vis' vælge 'sql-visning'. Den vil så vise sql-koden.
Men, hvis du ikke er så sql-kyndig, vil jeg anbefale, at du laver query'en i design-view.
Du skal sørge for at have relationer mellem de 3 tabeller. Jeg går ud fra, at det er din WHERE, som repræsenterer relationerne.
Sql med joins kan så se således ud: SELECT DebatEmne.titel, DebatIndlæg.dato, DebatIndlæg.ansvarlig, brugere.brugernavn, brugere.fornavn, brugere.efternavn, DebatIndlæg.Relation FROM DebatEmne INNER JOIN (DebatIndlæg INNER JOIN brugere ON DebatIndlæg.ansvarlig = brugere.brugernavn) ON DebatEmne.id = DebatIndlæg.Relation ORDER BY DebatIndlæg.dato DESC;
ALTERNATIV: Når man opretter et nyt emne oprettes et id via autonummerering. Tabellen med Indlæggene har et felt "relation" der relaterer til "id" i "debatemne" Der forefindes altså en "debatemne.oprdato" og en "debatindlaeg.dato" Hvis jeg sorterer på dato, så visis alle indlæg, sorteret efter dato, og derefter kommer så alle emnerne. Jeg vil gerne have dem sorteret alt efter hvad der er nyest, uanset om det er et emne eller et indlæg.
SVAR PÅ SENESTE: Nu har jeg fundet frem til det, men synes ikke at den giver mig muligheden for en så avanceret sortering.
Alternativ: Mit spørgsmål kørte på, om man ikke kunne nøjes med at vise de nyeste indlæg med angivelse af, hvilket emne, de hører til? Vis felterne DebatIndlæg.dato, DebatEmne.titel, DebatIndlæg.ansvarlig.. Hmm, er der en separat titel på indlægget? (så skal det jo med ovf.)
Seneste: Du kan have flere forskellige sorteringer, den der kommer først i rækkefølgen har første prioritet.
Har du klokkeslet med i dato? Hvis ikke vil den jo møde en række ens værdier, og derefter sortere efter noget andet.
Grunden til at jeg ikke blot viser indlæggene på forsiden er, at når man så lige har oprettet et nyt emne, så vil den ikke blive vist på forsiden, og det er jo synd.
Jeg har prøvet en alternativ/fusker løsning. Idet der oprettes et nyt emne, bliver der samtidig oprettet et tomt indlæg. På den måde kan få det til at se rigtigt ud på forsiden. Så opstår der dog et problem, under selve oversigten over debatter, da der ud for hvert emne står, hvor mange kommentarer(indlæg) der er til emnet. Så starter den jo på 1 i stedet for 0. Debat-forsiden: http://www.ballumby.net/lokalinfo/debatforum/debat-forside.asp
Der er ikke klokkeslet på. Det skulle jeg måske nok sætte ind, også.
Er villig til at gå alternative veje. Nu skal det sgu bare op og køre...
Hvis du kalder det 'antal indlæg' i stedet for 'antal kommentarer', så burde den jo være hjemme :) Alternativt, kan du jo bare trække een fra 'antal kommentarer'.
Og så ændre datatypen til også at inkludere klokkeslet, så burde den være der.
Hehe -You said it! Min tanke var også, at man kunne trække een fra i sql'en, men hvordan hulen gør man det? Jeg har prøvet lidt af hvert, dog uden resultat. Hvis nu f.eks. sql'en ser således ud:
SELECT debatemne.indhold, debatemne.id, debatemne.img1, debatemne.titel, debatemne.oprdato, debatindlaeg.relation, Count(debatindlaeg.relation) AS Antal FROM (brugere LEFT JOIN debatemne ON brugere.brugernavn = debatemne.ansvarlig) LEFT JOIN debatindlaeg ON debatemne.id = debatindlaeg.relation WHERE (((debatemne.ansvarlig)=[brugere].[brugernavn])) GROUP BY debatemne.titel, debatemne.oprdato, debatindlaeg.relation, debatemne.img1, debatemne.id, debatemne.indhold ORDER BY debatemne.id DESC;
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.