Avatar billede pelskee Nybegynder
17. december 2004 - 09:19 Der er 23 kommentarer og
1 løsning

Hvordan skal denne Distinct laves

jeg har en liste der viser en række fiskerekorder men den skal kun vise hver fisk én gang og den der skal vises er den hvor kilo er størst. altså hvis 3 har fanget en laks så skal den kun vise den som har fanget den største laks.

SELECT Fisk, IDprofil, LEFT(Navn,7) AS Navn, Kilo  FROM rekorder, profiler, fisk  WHERE profilID=IDprofil AND fiskID=IDfisk  ORDER BY Kilo DESC

Link: http://www.pikeinc.dk/index.asp
se nederst til højre
Avatar billede michael_stim Ekspert
17. december 2004 - 09:27 #1
LIMIT 1 ORDER BY kilo
Avatar billede michael_stim Ekspert
17. december 2004 - 09:28 #2
Og det skal väre DESC ;o)
Avatar billede michael_stim Ekspert
17. december 2004 - 09:32 #3
Tror forresten at LIMIT 1 skal stå til sidst for at det skal virke.
Avatar billede pelskee Nybegynder
17. december 2004 - 09:33 #4
"SELECT Fisk, IDprofil, LEFT(Navn,7) AS Navn, Kilo  FROM rekorder, profiler, fisk  WHERE profilID=IDprofil AND fiskID=IDfisk LIMIT 1 ORDER BY Kilo DESC"

melder fejl

og den skal i princippet vise alle fisk - bare kun vise dem 1 gang med tilhørende toprekord
Avatar billede pelskee Nybegynder
17. december 2004 - 09:33 #5
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

[MySQL][ODBC 3.51 Driver][mysqld-4.0.18-log]You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'ORDER BY Kilo DESC' at line 1

/index.asp, line 48
Avatar billede michael_stim Ekspert
17. december 2004 - 09:37 #6
"SELECT Fisk, IDprofil, LEFT(Navn,7) AS Navn, MAX(Kilo)  FROM rekorder, profiler, fisk  WHERE profilID=IDprofil AND fiskID=IDfisk GROUP BY fisk"

Hvad med den?
Avatar billede pelskee Nybegynder
17. december 2004 - 09:49 #7
der melder den ikke fejl, men den parrer ikke den rigtige profil med den rigtige rekord: http://www.pikeinc.dk/index.asp

Bluefin tun Bo Nord 270 kg 
det er Michael der har den rekord.

åhhh nej skal man så ud i noget LEFT JOIN for det har jeg ikke styr på
Avatar billede pelskee Nybegynder
04. januar 2005 - 14:26 #8
any ideas... ?
Avatar billede michael_stim Ekspert
04. januar 2005 - 15:18 #9
Pröv at skrive f'et i GROUP BY fisk med stort f:
GROUP BY Fisk
Ser at du både har en kolonne og en tabel der hedder fisk.
Avatar billede pelskee Nybegynder
04. januar 2005 - 15:45 #10
"SELECT Fisk, IDprofil, LEFT(Navn,7) AS Navn, MAX(Kilo)  FROM rekorder, profiler, fisk  WHERE profilID=IDprofil AND fiskID=IDfisk GROUP BY Fisk"
giver samme resultat
Avatar billede fennec Nybegynder
04. januar 2005 - 15:59 #11
Det kan sikkert godt laves i en SQL, men det kan ihvertfald laves med noget ASP kode også:

set rs = conn.execute("select * from fisk")
do while not rs.eof
  set rs1 = conn.execute("select IDprofil, LEFT(Navn,7) AS Navn, Kilo FROM rekorder, profiler where fiskID="& rs("IDfisk") &" order by kilo desc limit 1")
  if not rs1.eof then
    response.write rs1("kilo") & " " & rs1("Navn")
  else
  'Ingen fisk fanget endnu
  end if
  rs.MoveNext
loop
Avatar billede pelskee Nybegynder
05. januar 2005 - 16:37 #12
skal det indsættes nede i selve koden ?

min kode der viser rekorderne ser sådan ud:
                        <%
While ((Repeat2__numRows <> 0) AND (NOT rsRekorder.EOF))
%>
                        <tr>
                            <td height="14"><%=(rsRekorder.Fields.Item("Fisk").Value)%></td>
                            <td height="14" onMouseOver="return overlib('Se profil');" onMouseOut="return nd();"><a class="normal" href="profil.asp?IDprofil=<%=(rsRekorder.Fields.Item("IDprofil").Value)%>"><%=(rsRekorder.Fields.Item("Navn").Value)%></a></td>
                            <td height="14" align="right"><%=(rsRekorder.Fields.Item("MAX(Kilo)").Value)%> kg </td>
                        </tr>
                        <%
  Repeat2__index=Repeat2__index+1
  Repeat2__numRows=Repeat2__numRows-1
  rsRekorder.MoveNext()
Wend
%>
Avatar billede pelskee Nybegynder
06. januar 2005 - 13:17 #13
fennec - jeg har prøvet at arbejde videre på det du har skrevet og koble det sammen med noget af den samme kode fra http://www.eksperten.dk/spm/577693

jeg får nu denne kode. ser det nogenlunde ud ?

kode:
<%
Set rsFisk = Server.CreateObject("ADODB.Recordset")
rsFisk.ActiveConnection = MM_database_STRING
rsFisk.Source = "SELECT *  FROM fisk"
rsFisk.CursorType = 0
rsFisk.CursorLocation = 2
rsFisk.LockType = 1
rsFisk.Open()

do while not rsFisk.eof
Set rsRekorder = Server.CreateObject("ADODB.Recordset")
rsRekorder.ActiveConnection = MM_database_STRING
rsRekorder.Source = "SELECT IDprofil, LEFT(Navn,7) AS Navn, Kilo FROM rekorder, profiler WHERE fiskID="& rsFisk("IDfisk") &" ORDER BY kilo DESC LIMIT 1"
rsRekorder.CursorType = 0
rsRekorder.CursorLocation = 2
rsRekorder.LockType = 1
rsRekorder.Open()

  if not rsRekorder.eof then
%>
                        <tr>
                            <td height="14"><%=(rsRekorder.Fields.Item("Fisk").Value)%></td>
                            <td height="14" onMouseOver="return overlib('Se profil');" onMouseOut="return nd();"><a class="normal" href="profil.asp?IDprofil=<%=(rsRekorder.Fields.Item("IDprofil").Value)%>"><%=(rsRekorder.Fields.Item("Navn").Value)%></a></td>
                            <td height="14" align="right"><%=(rsRekorder.Fields.Item("MAX(Kilo)").Value)%> kg </td>
                        </tr>
<%
  else
    response.write "der er noget galt"
  end if
  rsFisk.MoveNext
loop
%>
Avatar billede fennec Nybegynder
07. januar 2005 - 08:58 #14
Det ser nogenlunde rigtig ud. Måske skulle du ændre "der er noget galt" til "Der er ingen fisk fanget af denne type endnu.". Da det er det, der er sket.
Avatar billede pelskee Nybegynder
07. januar 2005 - 13:37 #15
den melder fejl:
ADODB.Fields error '800a0cc1'

Item cannot be found in the collection corresponding to the requested name or ordinal.

/index.asp, line 291
Avatar billede pelskee Nybegynder
07. januar 2005 - 13:37 #16
dette er linie 291:                            <td height="14"><%=(rsRekorder.Fields.Item("Fisk").Value)%></td>
Avatar billede fennec Nybegynder
07. januar 2005 - 13:41 #17
<%=(rsRekorder.Fields.Item("Fisk").Value)%>

skal være:
<%=(rsFisk("Fisk"))%>
Avatar billede pelskee Nybegynder
07. januar 2005 - 13:44 #18
yep :)
Den parrer ikke navn rigtigt med fisken så det er den rigtige profil der vises ud for den rigtige fisk.

Link: http://www.pikeinc.dk/index.asp

Kode:
<%
Set rsFisk = Server.CreateObject("ADODB.Recordset")
rsFisk.ActiveConnection = MM_database_STRING
rsFisk.Source = "SELECT *  FROM fisk"
rsFisk.CursorType = 0
rsFisk.CursorLocation = 2
rsFisk.LockType = 1
rsFisk.Open()

do while not rsFisk.eof
Set rsRekorder = Server.CreateObject("ADODB.Recordset")
rsRekorder.ActiveConnection = MM_database_STRING
rsRekorder.Source = "SELECT IDprofil, LEFT(Navn,7) AS Navn, Kilo FROM rekorder, profiler WHERE fiskID=" & rsFisk("IDfisk") & " ORDER BY kilo DESC LIMIT 1"
rsRekorder.CursorType = 0
rsRekorder.CursorLocation = 2
rsRekorder.LockType = 1
rsRekorder.Open()

  if not rsRekorder.eof then
%>
                        <tr>
                            <td height="14"><%=(rsFisk.Fields.Item("Fisk").Value)%></td>
                            <td height="14" onMouseOver="return overlib('Se profil');" onMouseOut="return nd();"><a class="normal" href="profil.asp?IDprofil=<%=(rsRekorder.Fields.Item("IDprofil").Value)%>"><%=(rsRekorder.Fields.Item("Navn").Value)%></a></td>
                            <td height="14" align="right"><%=(rsRekorder.Fields.Item("Kilo").Value)%> kg </td>
                        </tr>
<%
  else
    response.write "Der er ingen fisk fanget af denne type endnu."
  end if
  rsFisk.MoveNext
loop
%>
Avatar billede pelskee Nybegynder
07. januar 2005 - 14:14 #19
hvis jeg gør sådan virker det med at parre fisk med profil men den viser kun den først oprettede fisk og ikke den hvor Kilo er størst
Avatar billede pelskee Nybegynder
07. januar 2005 - 14:20 #20
nu ser den sådan ud:
rsRekorder.Source = "SELECT IDprofil, LEFT(Navn,7) AS Navn, MAX(Kilo) AS Kilo FROM rekorder, profiler WHERE fiskID=" & rsFisk("IDfisk") & " AND IDprofil=profilID GROUP BY " & rsFisk("IDfisk") & " ORDER BY fiskID ASC LIMIT 1"

men så siger den:
Microsoft OLE DB Provider for ODBC Drivers error '80004005'
[MySQL][ODBC 3.51 Driver][mysqld-4.0.18-log]Can't group on 'Kilo'
Avatar billede fennec Nybegynder
08. januar 2005 - 13:11 #21
den første var næsten rigtig, der manglede bare et join kriterie:

rsRekorder.Source = "SELECT IDprofil, LEFT(Navn,7) AS Navn, Kilo FROM rekorder, profiler WHERE profilID=IDprofil AND fiskID=" & rsFisk("IDfisk") & " ORDER BY kilo DESC LIMIT 1"
Avatar billede pelskee Nybegynder
10. januar 2005 - 09:07 #22
det spiller. tak. du skal have point :)
Avatar billede fennec Nybegynder
10. januar 2005 - 09:10 #23
.o) <-- One Eyed Jack
Avatar billede pelskee Nybegynder
10. januar 2005 - 09:12 #24
thankz
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
Computerworld tilbyder specialiserede kurser i database-management

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