Avatar billede Slettet bruger
17. april 2008 - 16:22 Der er 8 kommentarer

Udtræk

Hey eksperter.
Jeg har lavet et banner roationssystem (http://www.eksperten.dk/spm/828089).

Men det er lidt 'låst' hvilke jeg vil prøve at forklare hvad jeg mener med om lidt.

######## SQL STRENGEN ########
$sql = "SELECT b.bannerID, b.billede, ROUND(b.prioritet * 100 / SUM(b2.prioritet)) AS diff, b.prioritet
FROM banner b
LEFT JOIN banner b2 ON (b2.til > NOW() AND b2.fra < NOW() AND b2.visninger < b.maksvisning)
WHERE b.til > NOW() AND b.fra < NOW() AND b.visninger < b.maksvisning
GROUP BY b.bannerID";
######## /SQL STRENGEN ########



######## SQL FORKLARING ########
Først vælger vi de felter vi skal bruge i tabelen (banner)
Vi udregner et priotets tal for dem alle, ved at tage vores priotets tal fra hvert banner som kan variere mellem (0 -> 100).

Når der så skal vælges banner, så laver den et random tal, og vælger så det banner der er indefor det tal den finder frem.

OG så bruger vi "where" hvor maksvisningerne ikke er nået.
######## /SQL FORKLARING ########


Den er 'låst til' at det kun er ved maksvisning den ikke bliver vist.
De alle har det tilfældes om de har opnået deres antal visninger kører de kun til slutdatoen (hvilke er ønsket!)

F.eks. (dette er kun eksempler på hvad jeg ønsker med systemet):
Banner #1:> Den her skal bare blive ved indtil slutdatoen er passeret og selvfølgelig skal den tælle visninger og klik, men uendeligt af disse.

Banner #2:> Den her må maks få 5000 visninger, men har uendelige klik.

Banner #3:> Den her må maks få 100 klik, og uendelig visninger.

Banner #4:> Den her må maks få op til 5000 visninger eller 150 klik.


Håber I forstår mig.
Avatar billede kalp Novice
17. april 2008 - 20:47 #1
Nu har man vel ikke sindssyg mange rækker i sådan en database..
Det nemmeste lyder som om, at du skal have en kolonne med en boolean status i for om kampagnen er aktiv.

Din select skal efterfølgende bare gøres simplere og trække alt ud, som ikke er inaktivt. (hvad kan det give af rækker.. ikke særlig mange! jeg har aldrig set et website med f.eks 10.000 forskellige reklamer kørende;) )

og i dit programmeringssprog kan du lave dine tjeks og logik.

Det synes jeg er nemmere end hvad du forsøger at opnå med SQL.
Avatar billede kalp Novice
17. april 2008 - 20:49 #2
du kan i din SQL endda nøjes med, at hive én række ud... via. din random funktion.
Du ved at den er aktiv.

Når du har den i din kode, så kan du se om den skal gøres inaktiv og dermed ved du, at den ikke kommer frem næste gang.

Det er stensikkert tusinde gange nemmere.
Avatar billede Slettet bruger
19. april 2008 - 18:01 #3
Ja måske - men synes ikke det er den mest rigtige måde at løse problemet på.
Håber på hjælp til at lave en funktion i databasen, eller lign.
Avatar billede Slettet bruger
20. april 2008 - 16:36 #4
Er det for avanceret?
Avatar billede kalp Novice
20. april 2008 - 21:08 #5
den kan godt laves i en database, men så ville jeg lave en stored procedure.
Det ved jeg ikke om man kan lave i MySQL.

og selv om man kunne, så vil jeg stadig mene det andet er nemmere og hurtigere.
Avatar billede Slettet bruger
20. april 2008 - 21:26 #6
Hvad er forskellen på stored procedure og funktioner?
Troede umiddelbart det var det samme.

Kan du så give mig et indtryk af begge dele?
Avatar billede kalp Novice
20. april 2008 - 22:17 #7
jeg arbejder ikke med mysql.. derfor ved jeg ikke lige hvad der er der;)
det kan godt være det er det samme, men en funktion i MSSQL er i hvertfald noget helt andet end en stored procedure.

I en stored procedure kan man have lidt logik og på den måde kan man nok godt lave det du vil opnå.

jeg har i et af mine egne projekter lavet det med en switch, som ligeså godt kunne være nested if else sætninger.
Når annoncen bliver behandlet tjekkes der også om den skal have en ny status - f.eks deaktiveres.

jeg kan derfor mere hjælpe på det område end stored procedure vejen.
Til en SQL løsning må du vente og se hvem der kommer forbi og kan hjælpe med det:)
Jeg valgte den ikke selv fordi jeg synes det andet var nemmere.
Avatar billede Slettet bruger
28. april 2008 - 03:16 #8
Andre bud?
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