webForumDet fria alternativet

Random ur Sql

8 svar · 361 visningar · startad av Boorg

BoorgMedlem sedan okt. 2004409 inlägg
#1

Hej.

Har en Sql sträng som ser ut såhär:

Select DISTINCT a.name as n, a.created_on as c, b.Url as Url From photo a Left Join select_photo b on a.id = b.photo_id Order By a.created_on

Jag har ett bildgalleri där jag loopar ut den första bilden i varje galleri. Men nu vill jag ha så att den loopar ut en random bild som tillhör samma photo_id..
förstår ni? :)

Mvh Jesper borg

BoorgMedlem sedan okt. 2004409 inlägg
#2
Order By rnd(b.id)

får felmedelandet att:
Microsoft JET Database Engine (0x80004005)
ORDER BY-instruktionen (rnd(b.id)) stämmer inte med DISTINCT.

emissionMedlem sedan dec. 19996 721 inlägg
#3

Om man kör DISTINCT så måste ORDER-kolumnerna finnas med i SELECT:en.

Kör du ASP?

http://www.webforum.nu/showthread.php?p=1112611#post1112611

BoorgMedlem sedan okt. 2004409 inlägg
#4

ja jag kör asp.

	Randomize
	seed = (CInt(1000 * Rnd) + 1) * -1

		Sql = "Select DISTINCT a.name as n, a.created_on as o, mid(MAX(left(cstr(int(9000*rnd(b.id*" & seed & ")+1000)),4) + b.Url),5) as Url From photo a Left Join select_photo b on a.id = b.photo_id Order By a.created_on "

Får massa fel nu men inte på det?

Den gillar inte att jag har as n och as o. Ser inget fel i Sql satesn som den va, har bara lagt till det som du gav mig.

Medelande:
Microsoft JET Database Engine (0x80040E21)
Du försökte köra en fråga med en mängdfunktion som inte innehöll det angivna uttrycket 'n'.

LarsGMedlem sedan dec. 200012 464 inlägg
#5
Select a.name as n, 
       a.created_on as c, 
       b.Url  
From photo a Left Join select_photo b 
  on a.id = b.photo_id 
 where url in 
  (select top 1 url 
     from select_photo c
    where c.photo_id = b.photo_id
  Order By rnd(<frö>))
emissionMedlem sedan dec. 19996 721 inlägg
#6

Du kan inte köra DISTINCT, utan måste använda GROUP BY

Randomize
seed = (CInt(1000 * Rnd) + 1) * -1
Sql = "Select a.name as n, a.created_on as o, mid(MAX(left(cstr(int(9000*rnd(b.id*" & seed & ")+1000)),4) + b.Url),5) as Url From photo a Left Join select_photo b on a.id = b.photo_id Group By a.name,a.created_on Order By a.created_on "
BoorgMedlem sedan okt. 2004409 inlägg
#7

Nu fungerar det bättre =)

Va tvungen att ändra url från Pm till text, men nu gillar den inte null någonstans. Men det finns itne null någondstans... kan det ha något o göra med koden som du gav?

Microsoft JET Database Engine (0x80040E14)
Ogiltigt Null

emissionMedlem sedan dec. 19996 721 inlägg
#8

Det beror på LEFT-joinen. Skulle dock föreslå LarsG:s variant i stället. Det föll mig aldrig in att ta med b.photo_id i IN-satsen.

Sammantaget, med två smärre modifikationer av LarsG:s variant

Randomize
seed = (CInt(1000 * Rnd) + 1) * -1
Sql = "SELECT a.name AS n, a.created_on AS c, b.Url FROM photo a LEFT JOIN select_photo b ON a.id = b.photo_id WHERE url in (SELECT top 1 url FROM select_photo c WHERE c.photo_id = a.id ORDER BY rnd(" & seed & "*[b]c.id[/b])) [b]OR url is null[/b] ORDER BY a.created_on"

Modifieringarna är införandet av en faktor (b.id, där jag antagit att du har ett id på själva bilden) för att få rnd-funktionen att variera, och en "OR url is null", som jag tog med eftersom din LEFT-join indikerade att du även ville ha med gallerier som saknar bilder.

BoorgMedlem sedan okt. 2004409 inlägg
#9

Tackar hjärtligt :bire

129 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)