/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
[MySQL] Distinct virker ikke?
Fra : Pelle Gøeg


Dato : 07-07-03 14:05

Hej Gruppe,

Jeg har en "vis sidste kommentar" liste der skal vise de 8 sidste poster...

Lige nu ser min query sådan ud:

SELECT forum.forumID, games.GamesID, games.Name, forum.Date As Date2, IDSA
FROM forum, games WHERE forum.forumID = games.GamesID AND forum.sd = 'Y'
ORDER BY forum.date DESC LIMIT 8

Men så viser den et spil (som kommentaren handler om) flere gange i løbet af
de 8 og jeg vil kun have vist spillet 1 gang...

Her har jeg så kikket lidt i min "Start på SQL" og på mysql.com
dokumentationen, og den fortæller mig jeg skal indsætte DISTINCT men det
virker af h' til

SELECT forum.forumID, games.GamesID, DISTINCT games.Name, forum.Date As
Date2, IDSA FROM forum, games WHERE forum.forumID = games.GamesID AND
forum.sd = 'Y' ORDER BY forum.date DESC LIMIT 8

Nogle der venligst kan forklare mig hvad jeg skal gøre?

-Pelle

------------------------------------------------------------------------
Gamebird.dk - Game community for gamle spil



 
 
Jimmy (07-07-2003)
Kommentar
Fra : Jimmy


Dato : 07-07-03 14:16


"Pelle Gøeg" <sunsitenews@ghostofkathrine.dk> wrote in message
news:bebr7u$3m7$1@sunsite.dk...
> Hej Gruppe,
>
> Jeg har en "vis sidste kommentar" liste der skal vise de 8 sidste
poster...
>
> Lige nu ser min query sådan ud:
>
> SELECT forum.forumID, games.GamesID, games.Name, forum.Date As Date2, IDSA
> FROM forum, games WHERE forum.forumID = games.GamesID AND forum.sd = 'Y'
> ORDER BY forum.date DESC LIMIT 8

Muligvis følgende:

SELECT
forum.forumID, games.GamesID, games.Name, forum.Date As Date2,
IDSA
FROM
forum
LEFT JOIN games ON (forum.forumID = games.GamesID)
WHERE 1
AND forum.sd = 'Y'
GROUP BY games.gamesID
ORDER BY forum.date DESC
LIMIT 8

Mvh
Jimmy



Jens Gyldenkærne Cla~ (07-07-2003)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 07-07-03 14:19

Pelle Gøeg skrev:

> Her har jeg så kikket lidt i min "Start på SQL" og på
> mysql.com dokumentationen, og den fortæller mig jeg skal
> indsætte DISTINCT men det virker af h' til

Hvordan virker det "af h' til"? Effektiv fejlrapportering er nøglen
til effektiv hjælp.


> SELECT forum.forumID, games.GamesID, DISTINCT games.Name,
> forum.Date As Date2, IDSA FROM forum, games WHERE
> forum.forumID = games.GamesID AND forum.sd = 'Y' ORDER BY
> forum.date DESC LIMIT 8

Nu kender jeg ikke det store til mysql, men DISTINCT skal[1] stå før det
første felt i udtrækket. Virkefeltet er *alle* felter i udtrækket. Det
vil sige at hvis du skriver:

SELECT DISTINCT id, navn, spillernavn ...

- så kan det samme navn godt optræde flere gange, bare med
forskellige spillernavne.

Noter:
======
[1] I de sql-varianter jeg kender
--
Jens Gyldenkærne Clausen
Greenwich nedrig gang: Ny Delhi (GMT +5.5), Badutspring By (GMT
+2), Ny York (GMT 5), Høns (GMT 6), Los Engel (GMT 8)
(Fra <http://www.paris-tours-guides.com/index_danish.shtml>)

Pelle Gøeg (07-07-2003)
Kommentar
Fra : Pelle Gøeg


Dato : 07-07-03 15:38


"Jens Gyldenkærne Clausen" <jens@gyros.invalid> skrev i en meddelelse
news:Xns93B19BE417915jcdmfdk@gyrosmod.dtext.news.tele.dk...
> Pelle Gøeg skrev:
> Hvordan virker det "af h' til"? Effektiv fejlrapportering er nøglen
> til effektiv hjælp.

undskyld, glemte fejl meddelelsen...

fejlen:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result
resource

det skal siges at det er PHP der spytter dette ud!
Oversat betyder det at queryen ikke er ok.

> Nu kender jeg ikke det store til mysql, men DISTINCT skal[1] stå før det
> første felt i udtrækket. Virkefeltet er *alle* felter i udtrækket. Det
> vil sige at hvis du skriver:
>
> SELECT DISTINCT id, navn, spillernavn ...
>
> - så kan det samme navn godt optræde flere gange, bare med
> forskellige spillernavne.

Dette virker ikke (giver fejlen ovenfor)...
SELECT forum.forumID, games.GamesID, DISTINCT games.Name, forum.Date As
Date2, IDSA FROM forum, games WHERE forum.forumID = games.GamesID AND
forum.sd = 'Y' ORDER BY forum.date DESC LIMIT 8

men dette virker, dog ikke som ventet, det giver det samme result som vis
DISTINCT ikke var med...
SELECT DISTINCT forum.forumID, games.GamesID, games.Name, forum.Date As
Date2, IDSA FROM forum, games WHERE forum.forumID = games.GamesID AND
forum.sd = 'Y' ORDER BY forum.date DESC LIMIT 8

-Pelle

------------------------------------------------------------------------
Gamebird.dk - Game community for gamle spil




Peter Sepstrup (07-07-2003)
Kommentar
Fra : Peter Sepstrup


Dato : 07-07-03 18:17

Pelle Gøeg wrote:

> undskyld, glemte fejl meddelelsen...
>
> fejlen:
> Warning: mysql_fetch_array(): supplied argument is not a valid MySQL
> result resource
>
> det skal siges at det er PHP der spytter dette ud!
> Oversat betyder det at queryen ikke er ok.

Du kan få php til at give en mere dækkende sql fejlmeddelse, prøv følgende:
$sql = mysql_query("SELECT...") or die(mysql_error());

Så vil du få besked der siger lidt mere om hvad fejlen er.
--
Mvh. Peter.
___________________________________
www.SepstrupNET.dk & www.PHP-FAQ.dk

Jens Gyldenkærne Cla~ (07-07-2003)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 07-07-03 20:32

Pelle Gøeg skrev:

> fejlen:
> Warning: mysql_fetch_array(): supplied argument is not a valid
> MySQL result resource
>
> det skal siges at det er PHP der spytter dette ud!
> Oversat betyder det at queryen ikke er ok.

Formentlig fordi du bruger DISTINCT midt i sætningen.


> men dette virker, dog ikke som ventet, det giver det samme
> result som vis DISTINCT ikke var med...

Som jeg skrev før virker distinct på _alle_ felter i dit udtræk -
og hvis der fx er forskellige datoer på et spilnavn, så vil navnet
optræde to gange.

Eksempel (forenklet):

testview_vw:
gameId, navn, dato
   2, Ludo, 03-07-2003
   2, Ludo, 20-06-2003
   4, Skak, 02-03-2003


SELECT DISTINCT gameId FROM testview_vw
=>
   2
   4

SELECT DISTINCT gameId, navn FROM testview_vw
=>
   2, Ludo
   4, Skak

SELECT DISTINCT gameId, navn, dato FROM testview_vw
=>
   2, Ludo, 03-07-2003
   2, Ludo, 20-06-2003
   4, Skak, 02-03-2003

(alle rækker er unikke, selv om de to første felter er dublerede).

Hvis man vil have datoen med - men kun én af dem, kan man fx vælge
at finde den største (nyeste) af dem:

SELECT gameID, navn, MAX(dato) as mdato
FROM testview_vw
GROUP BY gameID, navn
=>
   2, Ludo, 03-07-2003
   4, Skak, 02-03-2003
--
Jens Gyldenkærne Clausen
Velkommen hen til Paris International!
Rejse, lede og fortolkere. Jeres oven på- kø levere i Paris
nemlig... (<http://www.paris-tours-guides.com/index_danish.shtml>)

Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408847
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste