Avatar billede Jman Praktikant
13. december 2002 - 08:35 Der er 14 kommentarer og
1 løsning

Select distinct, men kun på et felt

SQL = "Select distinct (art_kategori), ID from artikel"

Det ville være min umiddelbare løsning for at kunne lave en kategori-oversigt.
Hmmm ... Ovenstående løsning giver mig :

kategori_1
kategori_2
kategori_1

hvor jeg kun skulle have

kategori_1
kategori_2

Det virker også hvis jeg fjerne ',id' fra select, men så kan jeg ikke linke til den rigtige id :(

Hvad gør man så ?
Avatar billede eagleeye Praktikant
13. december 2002 - 08:45 #1
Hvis du har den tabel sådan her:

ID  art_kategori
1    kategori_1
2    kategori_2
3    kategori_1

Så kan du ikke bruge distinct til at så en af hver kategori + det tilhørne ID da ID vil være forskelligt fra record til record. Eller skal det være katID som er IDen på kategorien.

ID  art_kategori  katID
1    kategori_1    1
2    kategori_2    2
3    kategori_1    1
Avatar billede Jman Praktikant
13. december 2002 - 08:55 #2
okay - det er jeg med på. Fortsættelsen er så at man bliver linket til en side hvor jeg selecter på nyeste artikel, hvor prioritet = 1. (på den måde vil jeg nemlig kunne styre hvad der skal være den vigtigste/første artikel på kategorien)
Jeg havde sådan set også gjort som jeg selv har beskrevet i problembeskrivelsen, men så kommer mit problem 2: På den side jeg kalder vil jeg lave en liste over alle artikler, der matcher kategorien, men jeg vil gerne kunne genbruge asp-siden og HER løber jeg jo så ind i et problem, da den jo skal linke på ID... Det var derfor jeg ville finde en metode at få ID med fra første side også.  (Så jeg kan genbruge asp-siden)
Avatar billede eagleeye Praktikant
13. december 2002 - 09:08 #3
Hvis du kender kategorien kan du finde ID'erne som tilhøre den kategori.
Så du i linket overføre kategorien og ikke ID'er på records i kategorien.
Avatar billede Jman Praktikant
13. december 2002 - 09:22 #4
ikke forstået - måske du kune forklare de i sammenhæng med min side:
<%
SQL = "Select * from artikel where art_kategori='" & request.querystring("artikel") &"' and art_prior = 1 order by ID desc"
set RS = conn.execute(sql)
if rs.eof or bof then
%>
            <table border="2" cellpadding="4" cellspacing="0" style="border-collapse: collapse; border-style: dotted; border-width: 0; " bordercolor="#ACC9AC" width="100%" height="100%" id="AutoNumber4" bordercolorlight="#ACC9AC" bordercolordark="#94BA94" bgcolor="#FFFFEE">
              <tr>
                <td valign="top"><h3>Der var ingen emner i denne kategori</h3></td>
              </tr>
            </table>
<% else %>
            <table border="2" cellpadding="4" cellspacing="0" style="border-collapse: collapse; border-style: dotted; border-width: 0; " bordercolor="#ACC9AC" width="100%" height="100%" id="AutoNumber4" bordercolorlight="#ACC9AC" bordercolordark="#94BA94" bgcolor="#FFFFEE">
              <tr>
                <td valign="top">
                <h3><%=rs("art_Overskrift")%></h3>
                <hr color="#94BA94" size="1">
                <h4><%=rs("art_rubrik")%></h4>
                <hr color="#94BA94" size="1">
                <h5><%=rs("art_tekst")%></h5>
                </td>
                <td valign="top" width="110">
                <h3>I denne kategori</h3>
                <hr color="#94BA94" size="1">
<%
SQL2 = "Select * from artikel where art_kategori='" & request.querystring("artikel") &"' order by ID desc"
set RS2 = conn.execute(sql2)
%>
<% do while not rs2.eof %>
                <h4><a href="artikel.asp?id=<%=rs2("id")%>"><%=rs2("art_Overskrift")%></a></h4>
<%
rs2.movenext
loop
rs2.close
%>
              </tr>
            </table>
<% end if %>

Jeg er helt sikker på at min metode kan gøre meget bedre, men bedre er jeg ikke :)
Avatar billede eagleeye Praktikant
13. december 2002 - 09:34 #5
Du kan godt lave en kategori oversigt med en ny SQL:


<%
SQL = "Select distinct art_kategori from artikel"
set RS = conn.execute(sql)
%> <table>
<% do while not rs.eof %>
    <tr><td><a href="?artikel=<%=rs("kategori")%>"><%=rs("kategori")%></a></td></tr>
<% rs.movenext
loop
rs.close
%>
</table>
Avatar billede Jman Praktikant
13. december 2002 - 09:55 #6
..jeg prøver det lig, men spørger samtidig: hvad sker der så med min første select, når det er samme asp-side ?
Avatar billede eagleeye Praktikant
13. december 2002 - 16:03 #7
Den første SQL
SQL = "Select * from artikel where art_kategori='" & request.querystring("artikel") &"' and art_prior = 1 order by ID desc"

hendter en artikel i den kategori som er valgt via querystringen artikel så hvis man bruger det samme til at overføre hvilken kateori der er valgt så skulle det gå.
Avatar billede Jman Praktikant
14. december 2002 - 00:58 #8
ÆV!!
Jeg kan ikke få det til at virke :(
Kan du evt. give en bedre løsning på mit problem...
Opsumering:
På min default-side vil jeg kalde en liste over kategorier. Her linkes man så til en artikel.asp-side, hvor man ser en artikel (har ikke helt bestemt om det skal være den nyeste post eller om det skal styres ved en prioritering). ved ssiden af denne artikel skal der så være en oversigt over andre artikler i samme kategori, men hvor man linker til artikel.asp igen og kalder ID for den artikel man vælger.
Avatar billede Jman Praktikant
14. december 2002 - 01:00 #9
lidt ligesom på www.sondagsavisen.dk - prøv at klikke på en hvilken som helst "læs mere" link. Så kan du se ideen
Avatar billede eagleeye Praktikant
14. december 2002 - 01:01 #10
Dette skulle stadig kunne bruges til at lave en kategori oversigt??

<%
SQL = "Select distinct art_kategori from artikel"
set RS = conn.execute(sql)
%> <table>
<% do while not rs.eof %>
    <tr><td><a href="?artikel=<%=rs("kategori")%>"><%=rs("kategori")%></a></td></tr>
<% rs.movenext
loop
rs.close
%>
</table>
Avatar billede eagleeye Praktikant
14. december 2002 - 01:03 #11
Den her linie som laver links til artikler:

%>
            <h4><a href="artikel.asp?id=<%=rs2("id")%>"><%=rs2("art_Overskrift")%></a></h4>
<%


Skal også overføre kategorien...:

%>
            <h4><a href="artikel.asp?artikel=<%=rs2("kategori")%>&id=<%=rs2("id")%>"><%=rs2("art_Overskrift")%></a></h4>
<%
Avatar billede eagleeye Praktikant
14. december 2002 - 01:15 #12
men hvis du vil havde siden skal vise en liste med nyheder i den ene side og den valgte nyhed i den anden side så skal koden laves lidt om..:



<table border="2" cellpadding="4" cellspacing="0" style="border-collapse: collapse; border-style: dotted; border-width: 0; " bordercolor="#ACC9AC" width="100%" height="100%" id="AutoNumber4" bordercolorlight="#ACC9AC" bordercolordark="#94BA94" bgcolor="#FFFFEE">
<tr>
  <td>

<table><tr><td>
<% 'Laver liste med alle artikler i kategorien
SQL2 = "Select * from artikel where art_kategori='" & request.querystring("artikel") & "' order by ID desc"
set RS2 = conn.execute(sql2)
%>
<% do while not rs2.eof %>
  <h4><a href="artikel.asp?artikel=<%=rs2("kategori")%>&id=<%=rs2("id")%>"><%=rs2("art_Overskrift")%></a></h4>
<%
rs2.movenext
loop
rs2.close
%>
  </td></tr></table>
</td>
<td>
<% ' Vis nyheden som er valgt eller den nyeste nyhed
  if request.Querystring("id") = "" then
    SQL = "SELECT TOP 1 * FROM artikel where art_kategori='" & request.querystring("artikel") & "' order by ID desc"
  else
    SQL = "SELECT * FROM artikel where id=" & request.querystring("id")
  end if
  set rs = Conn.Execute(SQL)
  if not rs.EOF then
%>
      <h3><%=rs("art_Overskrift")%></h3>
      <hr color="#94BA94" size="1">
      <h4><%=rs("art_rubrik")%></h4>
      <hr color="#94BA94" size="1">
      <h5><%=rs("art_tekst")%></h5>
<% else %>
    <h4>Ingen nyhed fundet</h4>
<% end if %>
 
  </td>
</tr>
</table>
Avatar billede Jman Praktikant
14. december 2002 - 01:23 #13
YES SIR!
Den er sq 2x point værd
Lige hvad jeg manglede - for lige selv at forstå det; hvorfor har du byttet om på de to selecter ?
Avatar billede eagleeye Praktikant
14. december 2002 - 01:29 #14
Ja jeg har flyttet rundt på de to select, for at få links i venstre side og selve nyheden/artiklen i højre side.

Der ud over var princippet i det første kode du viste en ville det vise nyheden eller ville koden det list de forskellige artikler..


if rs.eof or bof then

  'Vis nyhed/artikel

else

  'Lav liste med artiker.

end if



Det så lavet om til:

'Lav liste med artiker.

if rs.eof or bof then

  'Vis nyhed/artikel

end if
Avatar billede Jman Praktikant
14. december 2002 - 01:33 #15
ok - takker & bukker
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester