Avatar billede angelenglen Nybegynder
02. oktober 2011 - 22:04 Der er 6 kommentarer og
1 løsning

Vælg X antal varer fra kategori, eller tilfældige varer

Jeg har to følgende to tabeller:
Tabel navn: varer
Felter: id, kategori_id, navn

Tabel navn: kategorier
Felter: id, navn

Kategori_id i varer refererer direkte til feltet id i kategorier.


Det jeg har brug for er at kunne vælge 10 tilfældige varer fra kategori med fx id 5, men hvis der ikke er 10 varer i kategorien, så skal den vælge alle de varer der er (fx 6 varer) og så vælge de sidste 4 varer tilfældigt.

Håber det giver mening :-)
Avatar billede Slettet bruger
02. oktober 2011 - 22:20 #1

SELECT TOP 10 a.*
FROM kategorier a
INNER JOIN varer b ON b.kategori_id = a.id
WHERE b.id = 5 -- hvis det er varer fra kategori id = 5 du vil hente
ORDER BY NEWID()
Avatar billede Slettet bruger
02. oktober 2011 - 22:24 #2
Den var ikke helt korrekt, så prøver igen:

SELECT TOP 10 b.*
FROM kategorier a
INNER JOIN varer b ON b.kategori_id = a.id
WHERE a.id = 5 -- hvis det er varer fra kategori id = 5 du vil hente
ORDER BY NEWID()
Avatar billede HenrikSjang Nybegynder
02. oktober 2011 - 22:25 #3
Jeg tror følgende kunne være et bud:

DECLARE @kategori_id int = 5

;WITH CTE as (
SELECT
  varer.id as VareId,
  varer.navn as VareNavn,
  varer.kategori_id as KategoriId,
  kategorier.navn as KategoriNavn,
  case when varer.kategori_id = @kategori_id then 1 else 0 end as MatchKategoriId
FROM
  varer
  inner join kategorier on varer.kategoriid = kategorier.id
)
SELECT TOP 10 *
FROM cte
ORDER BY MatchKategoriId, newid()
Avatar billede angelenglen Nybegynder
03. oktober 2011 - 10:25 #4
Mange tak for forslagene.

Der var desværre ingen af de løsninger der virkede :-(

tolamaps returnerede varer fra den korrekte kategori, men hvis der fx kun var 2 varer i kategorien, blev der kun returneret 2 varer i alt, dvs. der manglede yderligere 8 tilfældige varer fra andre tilfældige kategorier.

sjangs returnerede kun tilfældige varer, til gengæld fik jeg 10 varer ud, men der var bare ingen fra den ønskede kategori imellem dem :-/
Avatar billede angelenglen Nybegynder
03. oktober 2011 - 10:29 #5
Prøvede lige at rette nederste linie i sjangs forslag fra:

ORDER BY MatchKategoriId, newid()

til:

ORDER BY MatchKategoriId DESC, newid()


Det gjorde en forskel!
Det gav mig lige hvad jeg var ude efter :-)


Smid et svar for points ^_^
Avatar billede HenrikSjang Nybegynder
03. oktober 2011 - 17:10 #6
Ahh ja, det er rigtigt der skulle tilføjes en DESC :)
Avatar billede Slettet bruger
03. oktober 2011 - 18:02 #7
Beklager, jeg overså kriteriet om at der altid skulle returneres 10 varer, hvis der ikke var nok i en bestemt kategori. :)
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